2017-12-23 9 views
0

私はpicture-modej,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を得るでしょう。

なぜこのような現象が発生していますか。

答えて

0

ASCII文字.は、整数値46を持ちます。picture-self-insert関数は、その引数をlast-command-event変数の値とともにカウントとして、picture-insert関数に渡します。あなたのケースでは、この結果、last-command-eventの値が46個挿入されます。これは.文字の1つの挿入を行います

(picture-insert ?. 1) 

:あなたのlambda機能で

、と(picture-self-insert (string-to-char "."))を交換してください。

+0

私は異常な動作が1つあったことに気付きました。私が行の先頭にいるときに 'picture-insert'を使って文字を挿入すると、前方に一定数のスペースがあるように見えます。それは毎回変わります。しかし前回から挿入されたスペースより1大きいようです。しかし、 'picture-self-insert'は、私たちが期待するように、行頭に文字を挿入します。これは私の質問の範囲外であるかもしれませんが、これがなぜであるかの考えがありますか?私はインデントに関連していると思われるすべてのモードを削除しましたが、これはまだ発生します。 – Piglet

+0

これは、 'picture-insert'を呼び出す前に' picture-self-insert'が 'picture-update-desired-column'を呼び出すためです。あなたは 'picture-insert'コールの前に、' picture-update-desired-column(not(eq this-command last-command))) 'と同じ方法で呼び出すこともできます。 –