2017-12-23 4 views
0

Ich bin in der Lage, Ascii Kunst in Emacs picture-mode zeichnen, indem Sie nach links, nach unten, oben und rechts mit den j,h,k,l Tasten in evil-normal-mode verschieben.Artist Mode Evil Integration

Um dies zu tun ich diese Bindungen verwendet:

(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 "."))))

Was ich erwarte, dass eine einzelne Insertion der . ist und für die Bewegung mit der entsprechenden picture-movement Funktion geändert werden.

Wenn ich jedoch diese Bindungen ausprobierte, war die Richtung des einzufügenden Textes richtig, aber 46 Zeichen wurden sofort eingefügt. Und der Charakter war der Schlüssel, den ich bedrängte, nicht die Periode.

Zum Beispiel, wenn ich l gedrückt habe, würde ich llllllllllllllllllllllllllllllllllllllllllllll sofort statt nur einer allmählichen Abfolge von Perioden bekommen, wie ich l weiter pressing.

Warum bekomme ich dieses Verhalten und wie kann ich mein erwartetes Verhalten erreichen?

Antwort

0

Das ASCII-Zeichen . hat den ganzzahligen Wert 46. Die Funktion picture-self-insert ihr Argument als Zählwert gibt, zusammen mit dem Wert der Variable last-command-event, zum picture-insert Funktion. Für Ihren Fall führt dies zu 46 Einfügungen des Werts last-command-event, was auch immer die Taste ist, die Sie gedrückt haben.

In Ihren lambda Funktionen ersetzen (picture-self-insert (string-to-char ".")) mit:

(picture-insert ?. 1) 

Dieses 1 Einsetzen des . Charakters durchführen wird.

+0

Ich bemerkte, dass es ein ungewöhnliches Verhalten gab. Wenn ich 'image-insert' benutze, um ein Zeichen einzufügen, wenn ich am Anfang einer Zeile bin, springt es, wie es scheint, zu einer bestimmten Anzahl von Leerzeichen vorwärts. Es variiert jedes Mal. Aber scheint 1 größer zu sein als die Leerzeichen aus der vorherigen Zeit. Aber 'picture-self-insert' fügt ein Zeichen am Anfang der Zeile ein, wie wir es erwarten würden. Das liegt vielleicht außerhalb des Rahmens meiner Frage, aber haben Sie eine Idee, warum das so ist? Ich habe alle Modi entfernt, die mit der Einrückung zusammenhingen, und das passiert immer noch. – Piglet

+0

Dies liegt daran, dass 'picture-self-insert'' image-update-wanted-column' aufruft, bevor es 'image-insert' aufruft. Sie könnten versuchen, es vor dem 'image-insert'-Aufruf gleich zu nennen:' (Bild-Update-Soll-Spalte (nicht (eq this-Befehl last-Befehl))) '. –