2016年4月16日

likiさんに教えてもらったのだが,

\include|
で起動すると,\includeで確定してファイル名補完が始まる.コントロールシークエンス一覧から\includeから始まる文字列を抜き出す処理がバグっているのかと思ったが,そうではなく実は想定していた挙動だった.つまりコードのバグではなく仕様のバグ.

新生補完マクロは,あらかじめ登録されたフォーマットを認識し,それようの補完を走らせる.この場合は\includeで登録されているフォーマットが走ってしまうわけだ.たとえば

\usepackage|
で走らせるとパッケージ名の補完が開始されることを期待するのが自然なので.

どうするかねー.とりあえずコントロールシークエンス\controlseqの途中で起動された場合は,辞書内に\controlseqで始まる文字列が高々一つかつフォーマット名が登録されている時に限りフォーマットを認識させるようにするかねー.

というわけでそうしてみた.\includeの補完を行いたい場合には,いったん出た補完ウィンドウで\includeを確定する必要がある.

ちなみに\includegで何も起こらない方はバグ.これは新しくコントロールシークエンス補完が起こるように意図していた.とりあえず新しくなくコントロールシークエンス補完が始まるように改良.と,\begin?でも同じく何も起こらなくなっていたけど,これは新しいコントロールシークエンス補完が開始されるように直した.

41 件のコメント:

liki さんのコメント...

今は試せないので、月曜日に確認してみます。
実はVimを使い始めてますが、LaTeXを編集、コンパイルするのには秀丸、祝鳥環境がまだまだ手放せません。

abenori さんのコメント...

とりあえず直してみただけなのでこちらでも動かしてみます.肩身の狭い(笑)秀丸ユーザ仲間が減ると悲しいのでよろしくお願いします.

Xp さんのコメント...

いつもすいません Xpでは補完の窓が開かず保護違反で異常終了です(0221版でも)。
Begin型でiならitemizeですが,shift Iとかやると落ちます。
また,設定からメニューの設定を選ぶと設定に入らず,設定のリストに戻ってしまいます。

ちなみにWin10 64bitへの移行を始めましたが,秀丸64bitではうまく動かず32bitに戻しました。

abenori さんのコメント...

あれ,またですか…….とりあえず前の通り下のmacrodll.dllに取り替えてdbconでまた試してもらえますか?
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22660&authkey=!ABF-6jweqQ-TALQ&ithint=file%2cdll

配布ページにも書いてあるとおり,秀丸64bitでは,DLLが32bitであるという理由によって使えません.

Xp さんのコメント...

dll入れ替えましたがdbconに何も表示されない???
因みにsection型,large型も落ちます。

abenori さんのコメント...

何も表示されないのは変だなぁ……macrodllのサイズは4M以上のはずですが,正しいですか?
それと,gen_dic.macの8行目の//debuginfo true;のコメントアウトを外してもらうと,マクロからのメッセージがdbconに飛ぶはずです.こちらもあると何か役に立つかもしれないので,よろしければ教えてください.

liki さんのコメント...

0416版使ってみました。問題なく動いています。ありがとうございます。

Xp さんのコメント...

ダウンロードされるmacrodllは579kBです。お手数ですが、再up願います。

abenori さんのコメント...

今度は大丈夫でしょうか
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22660&authkey=!ABF-6jweqQ-TALQ&ithint=file%2cdll

Xp さんのコメント...

”このアイテムは存在しないか使用できなくなっています”
となります。以前利用した
https://onedrive.live.com/?authkey=!AIfnovHX5Cicrak&id=4FABCB4EC4FA1E70!21860&cid=4FABCB4EC4FA1E70
からmacrodllがダウンロードできるようです。こちらで良いのでしょうか?

Xp さんのコメント...

Begin型でshift+iした結果です
macrodll:SETHMJREDLL: path = `c:\program files\hidemaru\hmjre.dll'
gen_dic.mac arguments: current = 1, cs = \begin, $arg =
$args[1] =
$args[2] =
$args[3] =
$args[4] =
$args[5] =
$args[6] =
$args[7] =
$args[8] =
$args[9] =
macrodll.dll:FILE_GETLONGPATHNAME: sfn = `C:\DOCUME~1\Xp\LOCALS~1\Temp\'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\tmp.dic'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\hint.dic'
macrodll.dll:EDIT_CREATE: hwnd = 721762, listfile = `c:\program files\hidemaru\macro\fortex\dic\Xp\betex.dic', title = `Begin型補完', str = `(null)'

Xp さんのコメント...

各種プログラム及びメニューの設定を選択したときは
macrodll:SETHMJREDLL: path = `c:\program files\hidemaru\hmjre.dll'
macrodll.dll:CALC_SETVARIABLE: name = hx, val = 154
macrodll.dll:CALC_SETVARIABLE: name = hy, val = 154
macrodll.dll:CALC_SETVARIABLE: name = hw, val = 768
macrodll.dll:CALC_SETVARIABLE: name = hh, val = 558
macrodll.dll:WINDOW_ENUMWINDOW: wclassreg = `^HM32CLIENT$', hwnd = 1573786
macrodll.dll:WINDOW_GETENUMWINDOWS: i = 0
macrodll.dll:WINDOW_GETWINDOWLEFT: hwnd = 2753424
macrodll.dll:CALC_SETVARIABLE: name = hcx, val = 158
macrodll.dll:WINDOW_GETWINDOWTOP: hwnd = 2753424
macrodll.dll:CALC_SETVARIABLE: name = hcy, val = 222
macrodll.dll:WINDOW_GETWINDOWRIGHT: hwnd = 2753424
macrodll.dll:CALC_SETVARIABLE: name = hcw, val = 760
macrodll.dll:WINDOW_GETWINDOWBOTTOM: hwnd = 2753424
macrodll.dll:CALC_SETVARIABLE: name = hch, val = 466
のあとはプログラム設定のメニューが呼び出されている感じです。

Xp さんのコメント...

section型では
macrodll:SETHMJREDLL: path = `c:\program files\hidemaru\hmjre.dll'
macrodll.dll:EDIT_CREATE: hwnd = 5243890, listfile = `c:\program files\hidemaru\macro\fortex\dic\Xp\sectex.dic', title = `Section型補完', str = `(null)'
で,秀丸が異常終了です。

abenori さんのコメント...

通常の補完のも教えてもらって良いですか?

Xp さんのコメント...

Ctrl+t 補完 を選択すると,

macrodll:SETHMJREDLL: path = `c:\program files\hidemaru\hmjre.dll'
macrodll.dll:PEG_NEWSYNTAX: name = search_cs, base = main
macrodll.dll:PEG_SETSKIP: name = search_cs, def = []
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = main, def = first '\\\\'* (? '\\') aftercs* end
PEGNode: (Rule:first,*(Value:'\\'),((Rule:YEN,Value:'\'),*(Rule:aftercs),Rule:end)
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = first, def = [^\\] | start
PEGNode: |(](Value:'\'),Rule:start)
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = aftercs, def = bBra | [^\\}]
PEGNode: |(Rule:bBra,](Value:'\}'))
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = bBra, def = '{' inbra* '}'
PEGNode: (Value:'{',*(Rule:inbra),Value:'}')
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = inbra, def = [^{}] | bBra
PEGNode: |(](Value:'{}'),Rule:bBra)
macrodll.dll:PEG_MATCH: name = search_cs, str =
gen_dic.mac arguments: current = -1, cs = , $arg =
$args[1] =
$args[2] =
$args[3] =
$args[4] =
$args[5] =
$args[6] =
$args[7] =
$args[8] =
$args[9] =
macrodll.dll:FILE_GETLONGPATHNAME: sfn = `C:\DOCUME~1\Xp\LOCALS~1\Temp\'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\tmp.dic'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\hint.dic'
from gen_dic.mac:
c:\program files\hidemaru\macro\fortex\dic\Xp\comtex.dic
c:\program files\hidemaru\macro\fortex\dic\Xp\
macrodll.dll:LISTBOX_SET: set = `comment_fix',val = 0
macrodll.dll:LISTBOX_SETSIZE: v = 6, h = 400
macrodll.dll:LISTBOX_SETFONT: fontname =`MS ゴシック', size = 13
macrodll.dll:LISTBOX_SET: set = `Show_only_match',val = 0
macrodll.dll:LISTBOX_SET: set = `CaseSense',val = 0
macrodll.dll:LISTBOX_SET: set = `Sort',val = 1
macrodll.dll:LISTBOX_SET: set = `Uniq',val = 1
macrodll.dll:LISTBOX_SETSHOW: show = 0
macrodll.dll:LISTBOX_CREATE: hwnd = 918768, x = 131, y = 203, listfile = `c:\program files\hidemaru\macro\fortex\dic\Xp\comtex.dic', comment = `c:\program files\hidemaru\macro\fortex\dic\Xp\'
ablib::window::BaseWnd::Create : ウィンドウ生成.ハンドル525412 クラス名ForTeXListBox
macrodll.dll:LISTBOX_GETWINDOWHEIGHT:
macrodll.dll:LISTBOX_SETPOS: x = 131, y = 203
macrodll.dll:LISTBOX_GETCOUNT:
macrodll.dll:LISTBOX_SELECTFROMTEXT: text = `'

の後で秀丸の異常終了です。

abenori さんのコメント...

とりあえず少しメッセージを出すようにしてみました.こちらを教えてください.(section型補完とbegin型補完はどちらか一方で大丈夫です.)
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22910&authkey=!AEMfPwcz38HIgpo&ithint=file%2cdll

Xp さんのコメント...
このコメントはブログの管理者によって削除されました。
Xp さんのコメント...
このコメントはブログの管理者によって削除されました。
Xp さんのコメント...

すいません,上2つ,個人情報を消し忘れました(何度か公開が旨くいかなくて間違えた・・・).
削除をお願いします.

abenori さんのコメント...

消しました.
……すみません,中身を見ないまま消してしまったので,もう一度お願いします.

Xp さんのコメント...

有り難うございます。
●begin型でshift+i
macrodll:SETHMJREDLL: path = `c:\program files\hidemaru\hmjre.dll'
gen_dic.mac arguments: current = 1, cs = \begin, $arg =
$args[1] =
$args[2] =
$args[3] =
$args[4] =
$args[5] =
$args[6] =
$args[7] =
$args[8] =
$args[9] =
macrodll.dll:FILE_GETLONGPATHNAME: sfn = `C:\DOCUME~1\Xp\LOCALS~1\Temp\'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\tmp.dic'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\hint.dic'
macrodll.dll:EDIT_CREATE: hwnd = 3146558, listfile = `c:\program files\hidemaru\macro\fortex\dic\Xp\betex.dic', title = `Begin型補完', str = `(null)'
set m_list
set m_title
set m_defstr
ResetResultStr
Wnd
Create

Xp さんのコメント...

●補完
macrodll:SETHMJREDLL: path = `c:\program files\hidemaru\hmjre.dll'
macrodll.dll:PEG_NEWSYNTAX: name = search_cs, base = main
macrodll.dll:PEG_SETSKIP: name = search_cs, def = []
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = main, def = first '\\\\'* (? '\\') aftercs* end
PEGNode: (Rule:first,*(Value:'\\'),((Rule:YEN,Value:'\'),*(Rule:aftercs),Rule:end)
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = first, def = [^\\] | start
PEGNode: |(](Value:'\'),Rule:start)
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = aftercs, def = bBra | [^\\}]
PEGNode: |(Rule:bBra,](Value:'\}'))
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = bBra, def = '{' inbra* '}'
PEGNode: (Value:'{',*(Rule:inbra),Value:'}')
macrodll.dll:PEG_SETRULE: name = search_cs, rulename = inbra, def = [^{}] | bBra
PEGNode: |(](Value:'{}'),Rule:bBra)
macrodll.dll:PEG_MATCH: name = search_cs, str =
gen_dic.mac arguments: current = -1, cs = , $arg =
$args[1] =
$args[2] =
$args[3] =
$args[4] =
$args[5] =
$args[6] =
$args[7] =
$args[8] =
$args[9] =
macrodll.dll:FILE_GETLONGPATHNAME: sfn = `C:\DOCUME~1\Xp\LOCALS~1\Temp\'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\tmp.dic'
macrodll.dll:FILE_DELETEFILE: fname = `C:\Documents and Settings\Xp\Local Settings\Temp\hint.dic'
from gen_dic.mac:
c:\program files\hidemaru\macro\fortex\dic\Xp\comtex.dic
c:\program files\hidemaru\macro\fortex\dic\Xp\
macrodll.dll:LISTBOX_SET: set = `comment_fix',val = 0
macrodll.dll:LISTBOX_SETSIZE: v = 6, h = 400
macrodll.dll:LISTBOX_SETFONT: fontname =`MS ゴシック', size = 13
macrodll.dll:LISTBOX_SET: set = `Show_only_match',val = 0
macrodll.dll:LISTBOX_SET: set = `CaseSense',val = 0
macrodll.dll:LISTBOX_SET: set = `Sort',val = 1
macrodll.dll:LISTBOX_SET: set = `Uniq',val = 1
macrodll.dll:LISTBOX_SETSHOW: show = 0
macrodll.dll:LISTBOX_CREATE: hwnd = 3277752, x = 197, y = 269, listfile = `c:\program files\hidemaru\macro\fortex\dic\Xp\comtex.dic', comment = `c:\program files\hidemaru\macro\fortex\dic\Xp\'
ablib::window::BaseWnd::Create : ウィンドウ生成.ハンドル7209962 クラス名ForTeXListBox
macrodll.dll:LISTBOX_GETWINDOWHEIGHT:
macrodll.dll:LISTBOX_SETPOS: x = 197, y = 269
macrodll.dll:LISTBOX_GETCOUNT:
macrodll.dll:LISTBOX_SELECTFROMTEXT: text = `'
GetSelect
GetCount
lstrlen
comparestr: i = 0

●各種プログラム及びメニューの設定で設定windowが開かない部分は不要ですか?

abenori さんのコメント...

> ●各種プログラム及びメニューの設定で設定windowが開かない部分は不要ですか?
DLLが落ちるのと同じ原因な気がするので,とりあえず保留でよさそうです.

後者の方がイヤーなところで落ちてますね…….次のURLのhidemaru.dllとhidemaru_wo.dllを落として,
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!21860&authkey=!AIfnovHX5Cicrak&ithint=folder%2cdll
次の二つのマクロを実行してもらっても良いでしょうか.(マクロとdllは同じ場所においてください.)

// 一つ目
debuginfo true;
debuginfo "load hidemaru.dll\n";
loaddll currentmacrodirectory + "\\hidemaru.dll";
##_ = dllfunc("testfunc");
freedll;

// 二つ目
debuginfo true;
debuginfo "load hidemaru_wo.dll\n";
loaddll currentmacrodirectory + "\\hidemaru_wo.dll";
##_ = dllfunc("testfunc");
freedll;

Xp さんのコメント...

●1.mac
load hidemaru.dll
Attach
testfunc called
declare function
set func by pointer
callset func by lambda
callset func by lambda + capture
callreturnDetach

●2.mac
load hidemaru_wo.dll
Attach
testfunc called
declare function
set func by pointer
callset func by lambda
callset func by lambda + capture
callreturnDetach

でした。特にエラーなどはありません。

abenori さんのコメント...

すみません,メッセージを見る限りアップロードがうまく行っていないみたいです…….もう一度試してもらえますか?マクロは少し変更してこんな感じです.(今度はどちらも落ちると思います.)

// 一つ目
debuginfo true;
debuginfo "load hidemaru.dll\n";
loaddll currentmacrodirectory + "\\hidemaru.dll";
##_ = dllfunc("testfunc");
##_ = dllfunc("clash");
freedll;

// 二つ目
debuginfo true;
debuginfo "load hidemaru_wo.dll\n";
loaddll currentmacrodirectory + "\\hidemaru_wo.dll";
##_ = dllfunc("testfunc");
##_ = dllfunc("clash");
freedll;

Xp さんのコメント...

●1
load hidemaru.dll
Attach
testfunc called
declare function
set func by pointer
call
set func by lambda
call
set func by lambda + capture
call
return
clash: static variable
force clashDetach



●2
load hidemaru_wo.dll
Attach
testfunc called
declare function
set func by pointer
call
set func by lambda
call
set func by lambda + capture
call
return
clash: static variable
force clash

いずれも異常終了しました。

abenori さんのコメント...

あれ,一つ目が思った以上に生きている…
すみません,今度は次のmacrodll.dllを落としてもらって,
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22915&authkey=!AAHX1sOt69iJFAo&ithint=file%2cdll
DLLと同じフォルダでこのマクロを動かしてもらって出力をお願いしてもよいでしょうか.
debuginfo true;
debuginfo "load macrodll.dll\n";
loaddll currentmacrodirectory + "\\macrodll.dll";
##_ = dllfunc("testfunc");
##_ = dllfunc("crash");
freedll;

Xp さんのコメント...

https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22915&authkey=!AAHX1sOt69iJFAo&ithint=file%2cdll
は認証を要求されるのですが?

abenori さんのコメント...

すみません,こちらで.
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22916&authkey=!APd-l6_xrmE13ak&ithint=file%2cdll

Xp さんのコメント...

load macrodll.dll
testfunc called
declare function
set func by pointer
call
set func by lambda
call
set func by lambda + capture
call
return
clash: static variable
force crash

abenori さんのコメント...

ありがとうございます.なんだかよくわからなくなりました.少し調べてみます.

abenori さんのコメント...

これでどうでしょう?
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22916&authkey=!APd-l6_xrmE13ak&ithint=file%2cdll

Xp さんのコメント...

4/23 3:53 macrodll

load macrodll.dll
testfunc called
declare function
set func by pointer
call
set func by lambda
call
set func by lambda + capture
call
return
clash: static variable
force crash

で異常終了しました。前回同様です。

abenori さんのコメント...

あ,すみません,このdllで補完などが動くようになったのではないかという意味でした.一応それっぽいところを直してみました.(テストマクロはもう捨ててください.)

Xp さんのコメント...

begin型と補完は正しく動いているものと思います。ありがとうございます。
各種プログラム及びメニューの設定についてはまだ,メニュー画面のループ状態のままです。

abenori さんのコメント...

そっちは,fortex\sub\tools\fortex_ps.exeを
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22917&authkey=!AL7gG-i3-ha3bxc&ithint=file%2cexe
に置き換えてみるとどうでしょう?

Xp さんのコメント...

こちらは変わらずメニューのループです
fortex_ps.exeは154kBで作成日が2月6日と表示されますが?
(ダウンロードした時点では4/25ですがコピーするとこうなります)

abenori さんのコメント...

多分それは大丈夫だと思います.直接起動するとどうでしょうかね.
fortex\sub\tools\fortex_ps.exe fortex\ini\(ユーザ名)\setttex.ini
とコマンドラインからしてもらって良いでしょうか.(渡す引数は""とかで囲まずそのままにしてください.)

Xp さんのコメント...

有効な32bitアプリケーションではありません,だそうです。

abenori さんのコメント...

あああああー.すみません,コンパイル時の設定の変更忘れでした…….もう一度
https://onedrive.live.com/redir?resid=4FABCB4EC4FA1E70!22917&authkey=!AL7gG-i3-ha3bxc&ithint=file%2cexe
のものに置き換えてみてください.

Xp さんのコメント...

今度は大丈夫。正常に動作しているように見えます。ありがとうございました! 

しかし,今回Xp上で一連の動作確認していると,周りの人間に変な目で見られてしまいました・・・
Xpを使い続けるのは,そろそろ厳しいかもしれません。