Wie wird der Schlüssel < Backtab > definiert? wie man es auslöscht; und wie erstelle ich ein neues von Grund auf neu?

Logos
Grundsätzlich was ich “ Ich habe in den letzten Wochen versucht, meine Tastenkombinationen einzeln anzupassen. Daher habe ich jeden Modus einzeln durchlaufen und seine Keymap einzeln vollständig gelöscht. Und dann die Funktionen binden, die ich für nützlich halte.
Ich mache dies auch zu Bildungszwecken, um mehr über das Innenleben von Keymaps, ihre Beziehung, ihre Manipulation usw. zu erfahren.

Aber was mich festgefahren hat, ist, wie einige Schlüssel (oder functions / macros; ich bin es nicht sicher, wie sie genannt werden sollen) sind definiert. Zum Beispiel <backtab>, <C-return>, <C-tab>, <C-iso-lefttab> usw.

Ich habe jede Funktionstaste sowohl in function-key-map als auch in local-function-map mit dem folgenden Befehl gelöst: (setf (cdr <keymap>) nil)

Aber diese Schlüssel scheinen immer noch zu existieren.

Vielleicht bin ich nur verwirrend Ich selbst, indem ich versuche, meinen Kopf gleichzeitig um die verschiedenen Abstraktionsebenen zu wickeln.


Frage
Wie würde ich diese Schlüssel vollständig auslöschen, damit ich von den ersten Prinzipien ausgehen und sie selbst erstellen kann (mit ihren eigenen benutzerdefinierten Namen und Funktionen)?


Bonusfrage
Warum erstellt (define-key input-decode-map [?\C-i] (kbd "<C-i>")) eine Abstraktion, die die Schlüssel C-i und <C-i> anders?
Strg + i == C-i == ^I == TAB
Control + i = = <C-i>! = TAB
Hat dies vielleicht etwas mit dem Paradigmenwechsel meines Denkens zu tun, der in der richtigen Reihenfolge stattfinden muss um Keymaps besser zu verstehen?


Ich denke, es würde mir und den Menschen in Zukunft wirklich helfen, wenn jemand ein triviales und komplexes Beispiel in einem Format wie diesem erstellen könnte (vorausgesetzt, der aktuelle Hauptmodus ist text-mode):

Tastendruck Strg + Rücktaste ->
lokale Funktions-Keymap Strg + Rücktaste = <C-backspace> ->
Textmoduszuordnung <C-backspace> = nil ->
globale Karte <C-backspace> = backward-kill-word


UPDATE
Ich habe festgestellt, dass Sie dies können Löschen Sie die Funktionen (irgendwie) und binden Sie sie dann wie folgt an die entsprechenden ASCII-Schlüssel zurück:

(setf (cdr x-alternatives-map) nil) (setf (cdr function-key-map) nil) (setf (cdr local-function-key-map) nil) (define-key local-function-key-map (kbd "<tab>") [9]) (define-key local-function-key-map (kbd "<return>") [13]) (define-key local-function-key-map (kbd "<escape>") [27]) (define-key local-function-key-map (kbd "<backspace>") [127]) 

Aber selbst wenn ich die Schlüssel aus irgendeinem Grund nie wieder binde ohne mein Wissen, der Mod ifiers der Schlüssel funktionieren noch. Gibt es also eine Keymap, die mir einfach nicht bekannt ist?

if <tab> = undefined C-<tab> = defined 

Kommentare

  • Es ' ist mir ein Rätsel .: (Es gibt ' auch x-alternatives-map und key-translation-map und input-decode-map, aber ich kann ' nicht herausfinden, wo backtab stammt von …
  • Ich glaube, ich habe herausgefunden, wo sie definiert sind. Es scheint, dass sie in der keyboard.c Quelldatei . Daher gibt es keine Möglichkeit, sie vollständig zu löschen.

Antwort

Vielleicht kann ich einen Teil Ihrer Frage (n) beantworten. Andere können hier wahrscheinlich mehr helfen.

<backtab> wird als „Funktionstaste“ bezeichnet, kann jedoch an einen Befehl in einer beliebigen Keymap gebunden werden. (Vergessen Sie in diesem Zusammenhang function-key-map.)

Vanilla Emacs (emacs -Q, keine Init-Datei) bindet einige Funktionstasten in verschiedenen Keymaps. Und Bibliotheken, die Sie laden, können dies auch.

Wenn Sie Funktionstastenbindungen wirklich entfernen möchten, würde ich vorschlagen, dass Sie in einem bestimmten Kontext aus den Modi arbeiten, die zu einem bestimmten Zeitpunkt aktuell sind. Verwenden Sie C-h k, um herauszufinden, an was ein solcher Schlüssel gebunden ist. Bestimmen Sie, an welche Keymap er gebunden ist (normalerweise eine Modus-Keymap), und lösen Sie die Bindung von dieser Map (in Ihrer Init-Datei) Zum Beispiel am Modus-Hook). Spülen und wiederholen.

Mit C-h M-k (describe-keymap) gefolgt von einer an eine Keymap gebundenen Variablen (oder gefolgt von einer tatsächlichen Keymap, wenn keine Variable vorhanden ist).Sie benötigen die Bibliothek help-fns+.el , wenn Sie describe-keymap verwenden möchten.

Einige Funktionstasten (z. B. backtab und f1 bzw. <backtab> und <f1> (, aber ich bevorzuge die nackte Notation ) sind ziemlich Standard. Andere sind spezifisch für Emacs. Sie können Stellen Sie sich eine Funktionstaste als logischen Namen für etwas vor, das unterschiedliche physische Implementierungen haben kann. backtab ist beispielsweise im Wesentlichen S-TAB steht hinter der Angabe „Übersetzung“, die Sie manchmal in *Help* für C-h k sehen.


( Aber ich frage mich, warum Sie, abgesehen vom Erlernen von Schlüsseln und Keymaps (was gut ist), diese Übung zum Entfernen von Schlüsselbindungen durchführen. Typischer ist es, einfach einen anderen Schlüssel an den Befehl zu binden, dessen Bindung Sie nicht mögen e. Wie auch immer, ich muss nicht verstehen warum.)

Kommentare

  • Ich glaube, ich habe herausgefunden, wo sie definiert sind Sie sind fest in der Quelldatei keyboard.c codiert. Daher gibt es keine Möglichkeit, sie vollständig zu löschen.
  • Ich habe die Frage aktualisiert, was ich bisher bekommen habe. Ich glaube, ich suche nach einer unbekannten-unbekannten fehlenden Keymap

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.