Normalerweise behandelt emacs aus historischen Gründen TAB
den C-i
Schlüsselcode und den Schlüssel gleich, vgl. die emacs-lisp-dokumentation auf funktionstasten oder abo-abos antwort auf die frage "Was ist der unterschied zwischen TAB und?" .
HINWEIS: In diesem Beitrag keycodes sind
TAB
,<tab>
undC-i
; tabund Ctrl+ idagegen sind die physischen Tasten auf der Tastatur.Im Moment behandelt der Emacs jedoch das
TAB
undC-i
als dasselbe, dh(equal (kbd "TAB") (kbd "C-i"))
->t
.
Da wir jedoch nicht länger in der Steinzeit des Rechnens leben, finde ich das äußerst ärgerlich. Es gibt ein paar Vorschläge, wie Sie das umgehen können, z
"Wie binde ich einen Befehl an Ci, ohne TAB zu ändern?"
- Trey's Solution hat bei mir nicht funktioniert, die Variable
local-function-key-maps
wird nicht geändert. Wenn Sie es ändern, um es zu verwenden,delete
anstatt es zu ändern, wird diedelq
Variable geändert, aber es wird keine Auflösung erzielt ... tabund Ctrl+ isind immer noch gleich. - Das Übersetzen in die Hyper-Map scheint eine Problemumgehung aus den 1980er Jahren zu sein ... Vielleicht möchte ich auch Hyper+ verwenden i.
- Trey's Solution hat bei mir nicht funktioniert, die Variable
Das Zuordnen
input-decode-map
von Ctrl+ izu einem Post-ASCII-Steuercode ist fast das, wonach ich suche. Außer dass es mit demkbd
Makro nicht richtig funktioniert, was bedeutet, dass man alle Bits des Quellcodes ändern muss, die Ctrl+ binden i. Dies ist wahrscheinlich die beste Lösung, da der gesamte Quellcode ordnungsgemäß geändert wurde.Die Verwendung von
(kbd "<tab>")
for tabund(kbd "C-i")
(das(kbd "TAB")
heißt, das\t
Literal) für Ctrl+ i funktioniert, aber Sie müssen alle Quelldateien ändern , die die falsche Art von tab[Read: the keycodeTAB
] verwenden, was ärgerlich ist.
Dies wurde z. B. in einer Github-Ausgabe und auch auf emacs.sx vorgeschlagen .
Keine dieser Lösungen scheint eine echte Lösung zu sein, ich würde sie eher als Workarounds oder Hacks (des vorhandenen Fehlers ) betrachten.
Gibt es eine Möglichkeit gibt , zu zwingen , Emacs zur Karte tabzu
(kbd "<tab>")
und(kbd "TAB")
während Ctrl+ izugeordnet wird(kbd "C-i")
kurz die Emacs - Quellcode Modyfing?Dieser Ansatz sollte für den Benutzer vollständig unsichtbar sein, was bedeutet, dass die tabgleichen Schlüsselcodes
<tab>
undTAB
einer Bindung zugeordnet werden sollten, während der Ctrl+ igleiche SchlüsselcodeC-i
einer anderen Bindung zugeordnet werden sollte.
Weniger ernst gemeint: Gibt es hier Emacs-Entwickler, die kommentieren können, ob dies irgendwann im Emacs-Quellcode geändert / behoben wird?
quelle
TAB
undC-i
(die Codes, nicht die Schlüssel) per definitionem ein und dasselbe sindTAB
.kbd
, TAB als [tab] zu übersetzen. Für die vorinstallierten Teile von Emacs funktioniert das einfach nicht.Antworten:
Die Zukunft ist längst vorbei, und die Steinzeit des Rechnens steht vor der Tür. Alle Text-Terminals, die ich kenne, senden Emacs immer noch genau die gleiche Byte-Sequenz C-ifür TAB, weshalb die ursprüngliche Notwendigkeit, sie zu "vereinheitlichen", immer noch sehr groß ist.
Die Input-Decode-Map (à la
(define-key input-decode-map "\C-i" [C-i])
) ist wahrscheinlich so gut wie sie jetzt ist.Als ehemaliger Betreuer von Emacs würde ich eine bessere Lösung für dieses Problem begrüßen, um die C-i( C-mund C-[) Schlüssel unter den GUIs freizugeben (wahrscheinlich für den Benutzer reserviert zu machen). Aber ich weiß nicht, wie ich das machen soll, ohne viele Probleme mit bestehenden Paketen zu verursachen.
quelle