私はpicture-mode
のj,h,k,l
キーをevil-normal-mode
で左、下、上、右に動かすことで、エマックスでasciiアートを描こうとしています。私はこれらのバインディングを使用し、これを行うにはアーティストモードEvil Integration
:
(nmap :keymaps 'picture-mode-map "k" (lambda() (picture-movement-up) (picture-self-insert (string-to-char "."))) "j" (lambda() (picture-movement-down) (picture-self-insert (string-to-char "."))) "h" (lambda() (picture-movement-left) (picture-self-insert (string-to-char "."))) "l" (lambda() (picture-movement-right) (picture-self-insert (string-to-char "."))))
私は期待して何が.
のと、対応するpicture-movement
機能を変更する運動のための単一の挿入です。
しかし、これらのバインディングを試してみると、挿入されるテキストの方向は正しいものの、すぐに46文字が挿入されました。そしてそのキャラクターは私が押したキーであり、期間ではありませんでした。
例えば、私がl
を押したとき、私はl
を押し続けている間にちょうど徐々に連続するのではなく、ただちにllllllllllllllllllllllllllllllllllllllllllllll
を得るでしょう。
なぜこのような現象が発生していますか。
私は異常な動作が1つあったことに気付きました。私が行の先頭にいるときに 'picture-insert'を使って文字を挿入すると、前方に一定数のスペースがあるように見えます。それは毎回変わります。しかし前回から挿入されたスペースより1大きいようです。しかし、 'picture-self-insert'は、私たちが期待するように、行頭に文字を挿入します。これは私の質問の範囲外であるかもしれませんが、これがなぜであるかの考えがありますか?私はインデントに関連していると思われるすべてのモードを削除しましたが、これはまだ発生します。 – Piglet
これは、 'picture-insert'を呼び出す前に' picture-self-insert'が 'picture-update-desired-column'を呼び出すためです。あなたは 'picture-insert'コールの前に、' picture-update-desired-column(not(eq this-command last-command))) 'と同じ方法で呼び出すこともできます。 –