separate Zuordnungen für TAB und Ci in .inputrc

separate Zuordnungen für TAB und Ci in .inputrc

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 xmodmapund .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 translationsvon xterm verwendete Ressource.

Im Normalfall wird jedoch control/Iein tabZeichen gesendet, da fast alle Terminals so eingerichtet sind.

Mit xkbkö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. xevist 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 tabist in diesem Fall einfach ein weiteres Zeichen.

xmodmapDie Rolle von in diesem Prozess wäre eine Ad-hoc-Änderung der X-Tastaturkonfiguration.

Wenn Sie verwenden xterm, bietet die translationsRessource 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/.Xdefaultszum Beispiel, obwohl es leicht unübersichtlich werden kann). Ich habe zum Beispiel dieXAPPLRESDIRUmgebungsvariable, die auf mein Benutzerverzeichnis verweist, das angepasste App-Standarddateien enthält. In eine mit dem Namen XTermkö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.

verwandte Informationen