2016年4月16日

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

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

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

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

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

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

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

41 件のコメント:

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

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

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

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

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

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

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

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

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

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

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

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

      削除
  10. 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)'

    返信削除
  11. 各種プログラム及びメニューの設定を選択したときは
    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
    のあとはプログラム設定のメニューが呼び出されている感じです。

    返信削除
  12. 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)'
    で,秀丸が異常終了です。

    返信削除
  13. 通常の補完のも教えてもらって良いですか?

    返信削除
    返信
    1. 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 = `'

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

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

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

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

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

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

    返信削除
  19. 有り難うございます。
    ●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

    返信削除
  20. ●補完
    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が開かない部分は不要ですか?

    返信削除
  21. > ●各種プログラム及びメニューの設定で設定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;

    返信削除
    返信
    1. ●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

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

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

    // 一つ目
    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;

    返信削除
  23. ●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

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

    返信削除
  24. あれ,一つ目が思った以上に生きている…
    すみません,今度は次の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;

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

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

      削除
  25. 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

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

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

    返信削除
    返信
    1. 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

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

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

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

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

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

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

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

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

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

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

      削除

コメントの追加にはサードパーティーCookieの許可が必要です