/ / Schreiben lisp Emacs Tastenbindung und kann nicht angeben, <delete> -Zeichen - Emacs, Tastaturkürzel, elisp

Schreiben lisp Emacs Tastenbindung und kann nicht angeben, <delete> -Zeichen - Emacs, Tastaturkürzel, elisp

Aus irgendeinem Grund habe ich den Standard-M-Del-SchlüsselBindung für Rückwärts-Kill-Wort, das einem Scan nach übereinstimmenden Klammern zugeordnet ist und das Zurücksetzen funktioniert nicht, daher versuche ich, die globale Schlüsselbindung in Lisp zu setzen. Also schrieb ich in ~ / .emacs.d / init.el die Lisp-Befehle:

(global-set-key (kbd "M-h") "rückwärts-kill-word)

(global-set-key (kbd "M- <löschen>") 'rückwärts-kill-word)

Ich habe sie mit C-x C-e ausprobiert und beide geben die"backward-kill-word output, aber nur die erste Tastenbindung funktioniert" Mh ", die andere wird ignoriert und M-del versucht immer noch die seltsame Scan-Aktion. Die delete-Taste funktioniert in emacs woanders, also scheint es wie" delete "zu sein Wird in lisp nicht dem physischen Schlüssel zugeordnet (und der Backslash wird nur in diesem Text angezeigt, wenn das Wort auskommentiert wurde). Gibt es eine Idee, welches Schlüsselwort oder welches Sonderzeichen verwendet werden soll? Beste.

(Ich habe nach Bibliotheken gesucht, die diesen Befehl möglicherweise übersteuert haben, aber ich kann sie nicht finden)

Antworten:

6 für die Antwort № 1

Auf einigen Systemen, die delete Schlüssel ist als ein Alias ​​definiert C-d. Dies wird durch gemacht function-key-map auf GNU Emacs <23 und local-function-key-map auf GNU Emacs 23. (Ich habe dieses Verhalten auf Debian und Ubuntu 10.04 unter X beobachtet.) Der Zweck solcher Übersetzungen ist es, Leute zu isolieren, die Modi aus den Terminalkompliziertheiten codieren: Ein Modus, der den Löschbefehl überschatten will, muss nur neu binden C-d und nicht wundern, wenn es neu binden sollte delete (Ist das ein Löschen links oder rechts löschen?) oder deletechar oder etwas anderes.

Wenn es eine globale oder lokale Bindung für gibt delete, es beschattet diese Übersetzung zu C-d. Wenn Sie jedoch drücken ESC delete, wenn es keine globale oder lokale Bindung für gibt ESC delete, der zweite Schlüssel wird in übersetzt C-d. Diese Übersetzung hat Vorrang vor der Interpretation von ESC delete wie M-delete. So ESC delete wird äquivalent zu C-M-d.

Dies ist wohl ein Fehler in Emacs: der Effekt von ESC delete sollte gleich sein wie M-deleteund es gibt keinen Grund warum ESC delete würde Rennen down-list was mit dem Löschen nichts zu tun hat.

Es gibt mehrere mögliche Korrekturen; Ich weiß nicht, welches das Beste ist. Eines, das mit jeder Version von Emacs funktionieren sollte, ist

(global-set-key [?e delete] "backward-kill-word)

2 für die Antwort № 2

Das wirklich schöne daran kbd ist das, was Sie dort eingeben, ist die gleiche Zeichenfolge, die Emacs anzeigt. Also, versuchen Sie Folgendes

C-h k M-<delete>       (to use your syntax)

oder

M-x describe-key M-<delete>

Emacs (für mich) antwortet mit:

M-DEL (übersetzt aus <M-löschen>) Läuft den Befehl backward-kill-word, Das ist ein interaktives kompiliertes Lisp Funktion in `simple.el".

Es ist an M-DEL gebunden.

(rückwärts-kill-word arg)

....

Was Sie sehen können, zeigt, dass die Darstellung für den gewünschten Schlüssel ist M-DEL oder M-delete.

Was ist ein langer Weg, um zu dem Punkt zu kommen, was Sie wollen

(global-set-key (kbd "M-delete") "backward-kill-word)

Natürlich, wenn Sie etwas in Ihren .emacs haben, das es außer Kraft setzt, wird das obige nicht helfen. Sie müssen die enthaltene Bibliothek finden und aufhören, sie zu benutzen (oder ihr Verhalten anzupassen).


1 für die Antwort № 3

Vielleicht möchten Sie anrufen global-set-key interaktiv, um zu sehen, wie Meta-Delete interpretiert wird. Probiere auch local-set-key um sicherzustellen, dass die seltsame Bindung nicht modusspezifisch ist.


0 für die Antwort № 4

Nachdem ich die Bibliothek mit dem Konflikt nicht finden konnte, habe ich diese Webseite gefunden http://www.cs.cmu.edu/cgi-bin/info2www?%28emacs%29Rebinding

Interaktive Änderung der Tastenbelegung

`M-x Global-Set-Schlüssel KEY CMD" Definieren Sie KEY global, um CMD auszuführen ....

Normalerweise, C-z" is bound to the function suspend-emacs "(wenn Sie das X Window System nicht verwenden), aber Sie können Veränderung C-z" to invoke an interactive subshell within Emacs, by binding it toSchale "wie folgt:

 M-x global-set-key <RET> C-z shell <RET>

`global-set-key 'liest den Befehlsnamen nach dem Schlüssel Drücken Sie die Taste. Eine Meldung wie diese erscheint, damit Sie dies bestätigen können Sie binden den gewünschten Schlüssel:

 Set key C-z to command:...

Und jetzt wird der Standardstandard wiederhergestellt

M-x Global-Set-Taste M-del ...

Rückwärts-Kill-Wort Aber das ist vorübergehend und muss bei jedem Nachladen gemacht werden, um das dauerhaft zu machen? Durch das Einfügen eines Befehls in die init.el wird der andere Effekt nicht überschrieben


Verwandte Fragen


Kommentare (0)

Einen Kommentar hinzufügen