
Bei dem, was ich versucht habe, scheinen „TAB“ und „Ci“ in .inputrc dasselbe zu bedeuten, was auch immer ich an das eine binde, wird an das andere gebunden. Ich weiß, dass es ursprünglich dasselbe war und dass dieses Verhalten irgendwie aus alten Zeiten stammt, aber heutzutage machen alle X-Anwendungen, abgesehen von Terminalemulatoren, den Unterschied zwischen einem Ci- und einem TAB-Druck.
Gibt es also eine Möglichkeit, einen Terminalbefehl auszuführen (z. B. „complete“), wenn ich die TAB-Taste drücke, und einen anderen Befehl auszuführen, wenn ich „Ci“ drücke?
(dieselbe Frage gilt für Cm und ENTER, Cz, Cd und alle diese Steuersequenzen, die ich auf andere Weise als mit ihrer ursprünglichen Bindung senden und meinen eigenen Befehlen auf diese wertvollen Tastenkombinationen anwenden möchte)
Und nebenbei, wenn Sie mir den Prozess von einem Tastendruck bis zu einer Shell-Interpretation ein wenig erklären könnten, würde mir das helfen, das zu verstehen. Im Moment habe ich verstanden, dass Tastaturereignisse von Xmodmap übersetzt werden, dann von .inputrc und dass das Ergebnis von der Shell oder so interpretiert wird.
Antwort1
Es besteht keine direkte Verbindung zwischen xmodmap
und .inputrc
.
Abhängig vom Terminalemulator gibt es verschiedene Möglichkeiten, die über das Terminal gesendeten Schlüssel zu ändern. Einige davon sind
- Ändern der X-Tastaturkonfiguration (xkb)
- Ändern der für ein bestimmtes Ereignis gesendeten Schlüsselcodes (simon_simon)
- Terminalspezifische Dinge wie die
translations
von xterm verwendete Ressource.
Im Normalfall wird jedoch control/Iein tabZeichen gesendet, da fast alle Terminals so eingerichtet sind.
Mit xkb
können Sie (im Prinzip) ändern, was die Tastatur macht. Die X-Anwendungen erkennen wiederum das Drücken und Loslassen von Tasten und übersetzen diese in Tastensymbole. xev
ist nützlich, um Ereignisse anzuzeigen. Ein in X laufender Terminalemulator erhält die Ereignisreihe, die er (mithilfe von X-Bibliotheksaufrufen) in Zeichen übersetzen kann. A tab
ist in diesem Fall einfach ein weiteres Zeichen.
xmodmap
Die Rolle von in diesem Prozess wäre eine Ad-hoc-Änderung der X-Tastaturkonfiguration.
Wenn Sie verwenden xterm
, bietet die translations
Ressource eine Menge Konfigurationsmöglichkeiten. Das ist ein Merkmal derX Toolkit, mit dem Sie verschiedene Tastenkombinationen mit den integrierten Aktionen von xterm verknüpfen können. Die Standardtastenkombinationen finden Sie imHandbuch. Sie können diese Bindungen überschreiben oder ergänzen. Es gibt mehrere Stellen, an denen Sie die Informationen festlegen können ( $HOME/.Xdefaults
zum Beispiel, obwohl es leicht unübersichtlich werden kann). Ich habe zum Beispiel dieXAPPLRESDIR
Umgebungsvariable, die auf mein Benutzerverzeichnis verweist, das angepasste App-Standarddateien enthält. In eine mit dem Namen XTerm
könnte ich Folgendes einfügen, um das Ergebnis von zu ändern ctrl/I:
*VT100*translations: #override \n\
Ctrl ~Shift<Key>I:string("??")
Da der tabSchlüssel über ein eigenes, spezielles Schlüsselsymbol verfügt, wird er von dieser Übersetzung nicht beeinflusst.