IME確定アンドゥ時にBackspaceに割り当てNo.07517
マカダミア さん 15/02/28 05:24
 
こんにちは。

Tabキーで空白4文字を入力する設定で使用しており、
行頭の空白のみが入力された位置でBackspaceを押した際、
空白1文字ずつではなく、タブストップの位置までまとめて
削除するようにしたいと思っています
(VimのsmarttabやSublime Textのような動作)。
そこで、添付のBackspace.macを作って、キー割り当て拡張でBkspに割り当てました。

やりたかったことは実現できましたが、
IMEで直前に確定した文字列を確定アンドゥ(Ctrl+Backspace)で編集する際、
IMEから送信されるBackspaceが1回分しか認識されず、
2文字以上前の確定済みの文字列が残ってしまいます。

  キー入力:あいうえお[Enter][Ctrl+Backspace]
期待する動作:【あいうえお】
 実際の動作:あいうえ【あいうえお】
(【 】で未確定の文字列を示します。)

マクロの内容には特に関係ないようですので、
単に「backspace;」と書いたマクロを割り当てた場合でも再現できます。

上記のような場合、IMEから送信されたキーの回数分のマクロを実行する方法は
あるでしょうか?


また、別の問題で、EOF直前の行を選択している際、
自分は[↓]キーで選択解除をするのですが、
他のエディターと違い、秀丸では選択解除されません。

----- 選択状態の例 -----
a
b
【c
】[EOF]
----------

こちらも添付のDown.macをDownに割り当てて使用しており、
特に問題はありませんが、いずれ標準の動作でも実現できるようになると
ありがたいです。


環境は次のようになります。
Windows 7 Home Premium
ATOK 2014, MS-IMEの両方で確認
秀丸エディタ8.51
入力モード トゥルーインライン入力、通常のインライン入力の両方で確認


----- Backspace.mac -----
if (selecting || (!column))
    backspace;
else {
    $left = gettext2(0, lineno, column, lineno);

    #re = loaddll("HMJRE.DLL");
    #r = dllfunc(#re, "FindRegular", "[^ \t]", $left, 0);
    if (#r != -1)
        backspace;
    else {
        #col = column;
        backtab;
        beginsel;
        moveto2 #col, lineno;
        endsel;
        backspace;
    }
}
----------

----- Down.mac -----
if (code == -1)
    right;
else
    down;
----------

[ ]
RE:07517 IME確定アンドゥ時にBackspaceにNo.07518
マカダミア さん 15/02/28 05:26
 
題名が長すぎました。
「IME確定アンドゥ時にBackspaceに割り当てたマクロが1回しか実行されない」
です。

[ ]
RE:07517 IME確定アンドゥ時にBackspaceにNo.07519
秀丸担当 さん 15/03/02 17:25
 

バグ情報ありがとうございます。
マクロとMS-IMEで確かにそうなることが確認できました。
秀丸エディタがマクロ実行中は2回目のキー操作を受け付けないようにしている
のだろうと思って調べてみたのですが、どうもそういうわけではないようで、ど
こで止められているのか不明です。
キー操作は送られてはいるようなのですが、なぜか秀丸エディタにそもそも届い
ていないという状況のようです。
もう少し詳しく調べてみます。

とりあえずの対策としては、同じ動作ではないですが、キー割り当てで「その他
編集」系にある「再変換」コマンドをどこか別のキーに割り当てておくと、直前
の単語を自動的に拾って変換する機能もあります。


EOFでの下矢印キーの動作も確かにそうなっていました。
マクロで回避できるということで、もし変更するとしたら互換性上の問題がある
かもしれないので慎重に考えたいと思います。

[ ]
RE:07519 IME確定アンドゥ時にBackspaceにNo.07520
マカダミア さん 15/03/03 01:50
 
ご回答いただきありがとうございます。
キー入力が秀丸エディタに届いていない状態で、
今のところ設定やマクロの修正では対応できないとのことで
了解いたしました。

ご教示いただいた再変換コマンドも便利そうですので
キー割り当てして試してみます。

[ ]
RE:07520 IME確定アンドゥ時にBackspaceにNo.07522
秀丸担当 さん 15/03/03 12:43
 

改めて調べてみたところ、秀丸エディタが連続した入力を除去してしまっている
処理がありました。
失礼しました。

除去することをやめれば大丈夫になることがわかりました。
しかしかなり初期の頃からそうなっていて、理由があってしていることだと思う
ので、変更すると別の問題が出てしまわないか心配です。

例えば、時間のかかる処理をキーリピートで行うと、処理がずっと行われ続けて
抜け出せないようなことを防止するという効果があります。
そういう効果が表れるのは、キー割り当てされたコマンドだったり、マクロが対
象になっていました。
Backspaceや文字の直接入力でリピートが妨げられることは無いです。
こういう問題を防止することと、マクロ連続を両立させることは難しそうですが、
処理に時間がかかった場合だけ除去するようにして解決できないか試してみなが
らしばらく手元で使ってみます。

[ ]