Wie unterscheidet man Ci von TAB?

20

Normalerweise behandelt emacs aus historischen Gründen TABden C-iSchlü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>und C-i; tabund Ctrl+ idagegen sind die physischen Tasten auf der Tastatur.

Im Moment behandelt der Emacs jedoch das TABund C-ials 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-mapswird nicht geändert. Wenn Sie es ändern, um es zu verwenden, deleteanstatt es zu ändern, wird die delqVariable 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.
  • Das Zuordnen input-decode-mapvon Ctrl+ izu einem Post-ASCII-Steuercode ist fast das, wonach ich suche. Außer dass es mit dem kbdMakro 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 \tLiteral) für Ctrl+ i funktioniert, aber Sie müssen alle Quelldateien ändern , die die falsche Art von tab[Read: the keycode TAB] 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>und TABeiner Bindung zugeordnet werden sollten, während der Ctrl+ igleiche Schlüsselcode C-ieiner 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?

elemakil
quelle
2
Beachten Sie, dass TABund C-i(die Codes, nicht die Schlüssel) per definitionem ein und dasselbe sind TAB.
Stefan
@ Stefan Deshalb habe ich die Notiz hinzugefügt . Ich werde den Beitrag bearbeiten und dort ablegen.
Elemakil
Mögliches Duplikat von Wie binde ich Ci anders als TAB?
Gilles 'SO- hör auf, böse zu sein'
IMO, diese Frage ist kein Duplikat, da alle in TAB definierten Tastenkombinationen (auch die aus externen Paketen) verschoben werden sollen, um stattdessen <tab> zu verwenden. Während die andere Frage war, wie man sie in Ihrem eigenen Code unterscheidet.
Malabarba
Mein Vorschlag wäre, zu raten kbd, TAB als [tab] zu übersetzen. Für die vorinstallierten Teile von Emacs funktioniert das einfach nicht.
Malabarba

Antworten:

21

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.

Stefan
quelle
Die Bronzezeit ist da, aber bisher nur in xterm
Gilles 'SO - hör auf, böse zu sein'
Fragen Sie sich, welche Art von Tastaturen Sie verwenden? Bei den typischen QWERT-Tastaturen ist die Unterscheidung offensichtlich, und diese Tasten nicht unterscheiden zu können, ist solch ein Schmerz ...
Ivan Huang