1 件の投稿を表示中 (合計 4 個)
  • 作成者
    投稿
  • #6990
    kshi
    参加者

    ※ 書き込み後に[編集]でかなり直しました。

    キーアサインを動的に変更するマクロを作ろうと、いろいろ試しているうちに疑
    問がわきましたので書かせていただきます。

    以下のマクロを実行すると、[無題]テキストにキーアサインのリストを出力しま
    す。

    editor.NewFile();

    cfg = document.Config;
    keylist = cfg.Keyboard.List;
    keylist.Add(0x4E, eeCtrl, 4195); //Ctrl+Nを「上に行挿入(4195)」に割り当てる ×
    //keylist.Add(0x4E, eeCtrl+1, 4195); //Ctrl+Nを「上に行挿入(4195)」に割り当てる ○
    cfg.Save();

    for(i = 1; i <= keylist.Count; i++){ item = keylist.item(i); document.writeln( "item.key: " + item.Key.toString() + "t(0x" + item.key.toString(16) + ")" + "tItem.Flags:" + item.Flags + "tItem.command:" + item.command ); } document.writeln("eeVirtualKey: " + eeVirtualKey); document.writeln("eeCtrl: " + eeCtrl); document.writeln("eeShift: " + eeShift); document.writeln("eeAlt: " + eeAlt);

    リストの最後の4行は Ctrl, Shift, Alt 押下時の定数を出力します。

    eeVertualKey: 1
    eeCtrl: 8
    eeShift: 4
    eeAlt: 16

    ちなみに、マクロリファレンスでは以下のとおり説明されています。

    【KeyboardItem オブジェクトのFlags プロパティ説明】

    eeVirtualKey オブジェクトの Key プロパティは、仮想キー コードであるこ
    とを示します。このフラグが指定されていない場合、Key プロ
    パティは文字コードを示すことになります。
    eeShift SHIFT キーを押しながら、指定するキーを押すことを示します。
    eeCtrl CTRL キーを押しながら、指定するキーを押すことを示します。
    eeAlt ALT キーを押しながら、指定するキーを押すことを示します。

    ■ Ctrl は 9 ?

    Ctrl+Nを「上に行挿入(4195)」に割り当てるコードも入っています。
    リストの最後あたりに Flags:8 と出力されるはずです。

    item.key: 78 (0x4e) Item.Flags:8 Item.command:4195

    ところが、他の Ctrl + ? の Flags は全て 9 になっています。

    [無題]テキストのキーアサインを[ツール]→[現在の設定のプロパティ]→[キーボ
    ード]で調べると、確かに Ctrl + N が追加されています([テキストの新規作成]
    のキーアサインは消えている)が、キーボードから Ctrl + N を入力しても反応し
    ません。一方、[ツール]→[すべてのコマンド]からメニュー選択すると実行でき
    ます。

    どうも Flags が eeCtrl だけではNGらしいので、+1 してやると、

    ・Ctrl+N
    item.key: 78 (0x4e) Item.Flags:9 Item.command:4195

    とリスト出力され、キーボードから Ctrl + N で実行できます。

    ■ Ctrl + Shift は 13 ?

    複数のシフトキーを押した場合も、合計値に +1 する必要があるようです。シフ
    トキーなしの Tab も Flags:1 となっていることからも +1 が既定ということで
    しょうか。

    ・Tab
    item.key: 9 (0x9) Item.Flags:1 Item.command:4188

    ・Ctrl+Tab
    item.key: 9 (0x9) Item.Flags:9 item.Command:4245

    ・Shift+Tab
    item.key: 9 (0x9) Item.Flags:5 item.Command:4189

    ・Ctrl+Shift+Tab
    item.key: 9 (0x9) Item.Flags:13 item.Command:4246

    「eeVertualKey +1 が既定になる」「+1 しなくても設定に追加されるのは仕様外である」という考え方で良いのでしょうか。ご教示いただければ幸いです。

    #6992
    Yutaka Emura
    キーマスター

    +1 というのは eeVertualKey のことですね。
    値は、これらのフラグの組み合わせの合計になるため、たとえば、

    Tab は eeVertualKey だけで 1
    Ctrl+Tab は eeVirtualKey + eeCtrl = 9
    Shift+Tab : eeVirtualKey + eeShift = 5
    Ctrl+Shift+Tab : eeVirtualKey + eeCtrl + eeShift = 13

    となります。これでおわかりでしょうか?
    他にも何かご質問がございましたらご連絡ください。8.02 正式版はまもなく公開したいと思いますが、それまでに何か不具合などがありましたら修正したいと思いますので、おはやめにご連絡ください。よろしくお願いします。

    #6993
    kshi
    参加者

    江村さん、ご回答ありがとうございます。

    当初、eeVirtualKey を eeVertualKeyとタイプミスして、
    「宣言されていません」エラーが出て、一人で混乱しておりました。

    KeyboardList コレクションひとつ取り上げてみても、
    EmEditorの深部に立ち入る仕組みが用意されており、
    いろいろなことが出来そうです。

    #7005
    kshi
    参加者

    特殊キーのコードを調べるのがちょっと面倒くさいな~と
    思っていたら、ライブラリにEmurasoftさんによる

    ・ 秀丸エディタのキー割り当てをインポートするマクロ

    があるのに今頃気づきました。
    良いリファレンスになります。

1 件の投稿を表示中 (合計 4 個)
  • このトピックに返信するにはログインしてください。