separate Zuordnungen für TAB und Ci in .inputrc

330
Antoine Gallix

Für das, was ich ausprobiert habe, scheinen "TAB" und "Ci" in .inputrc dasselbe zu bedeuten, was auch immer ich an das eine binde, ist an das andere gebunden. Ich weiß, dass es ursprünglich das Gleiche war und dass dieses Verhalten von früher her vererbt wurde, aber heutzutage, abgesehen von Terminalemulatoren, machen alle X-Anwendungen den Unterschied zwischen einer Ci- und einer TAB-Presse.

Gibt es eine Möglichkeit, einen Terminalbefehl auszuführen ("complete" zum Beispiel), wenn ich die TAB-Taste drücke und einen anderen Befehl ausführen, wenn ich "Ci" drücke?

(Die gleiche Frage gilt für Cm und ENTER, Cz, Cd und alle diese Kontrollsequenzen, die ich auf andere Weise als ihre ursprüngliche Bindung senden möchte und meine eigenen Befehle auf diese wertvollen Tastenkombinationen anwenden würde.)

Übrigens, wenn Sie den Vorgang von einem Tastendruck zu einer Shell-Interpretation etwas erklären könnten, die mir helfen würde zu verstehen. Im Moment habe ich verstanden, dass Tastaturereignisse von Xmodmap und dann von .inputrc übersetzt werden und das Ergebnis von der Shell oder ähnlich interpretiert wird.

0

1 Antwort auf die Frage

0
Thomas Dickey

Es gibt keine direkte Verbindung zwischen xmodmapund .inputrc.

Je nach Terminal-Emulator gibt es mehrere Möglichkeiten, die über das Terminal gesendeten Tasten zu ändern. Einige davon beinhalten

  • Ändern der X-Tastaturkonfiguration ( xkb )
  • Ändern der für ein bestimmtes Ereignis gesendeten Schlüsselcodes ( xmodmap )
  • terminalspezifische Dinge wie die translationsvon xterm verwendete Ressource.

control/ISendet jedoch in der normalen Situation ein tabZeichen, weil auf diese Weise fast alle Terminals eingerichtet wurden.

Mit xkbkönnen Sie (grundsätzlich) ändern, was die Tastatur macht. Die X-Anwendungen erkennen wiederum Tastendruck- und Freigabeereignisse und übersetzen diese in Schlüsselsymbole. xevist nützlich, um Ereignisse anzuzeigen. Ein Terminal-Emulator, der in X ausgeführt wird, erhält die Reihe von Ereignissen, die (mithilfe von X-Bibliotheksaufrufen) in Zeichen übersetzt werden können. A tabist in diesem Fall nur ein anderes Zeichen.

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

Wenn Sie gerade verwenden, xtermbietet die translationsRessource eine Menge Konfigurierbarkeit. Dies ist eine Funktion des X-Toolkits, mit der Sie verschiedene Tastenkombinationen mit den integrierten Aktionen von xterm verknüpfen können. Die Standardschlüsselbindungen sind im Handbuch aufgeführt . Sie können diese Bindungen überschreiben oder hinzufügen. Es gibt mehrere Stellen, an denen Sie die Informationen einstellen können ( $HOME/.Xdefaultsz. B. können diese leicht unübersichtlich werden). Beispielsweise habe ich die XAPPLRESDIRUmgebungsvariable so festgelegt, dass sie auf mein Benutzerverzeichnis verweist, das angepasste App-Defaults-Dateien enthält. In einem Namen XTermkönnte ich Folgendes eingeben, um das Ergebnis zu ändern ctrl/I:

*VT100*translations: #override \n\  Ctrl ~Shift<Key>I:string("??") 

Da der tabSchlüssel ein eigenes spezielles Schlüsselsymbol hat, ist er von dieser Übersetzung nicht betroffen.

Die Übersetzung von X keysym TAB nach Ci erfolgt durch den Terminalemulator, um sie an die Shell zu senden. Ich brauche das TAB keysym, um weiterhin an alle X-Anwendungen gesendet zu werden, wenn ich die Tabulatortaste meiner Tastatur drücke. Ich denke also, die einzige Lösung besteht darin, einen Weg zu finden, einen Terminal-Emulator zu konfigurieren, um TAB keysym in eine benutzerdefinierte Zeichenfolge (außer Ci) zu übersetzen, sodass ich sie später mit .inputrc dem zuordnen kann, was ich will. Irgendeine Idee, wie das geht? Ich habe versucht, einen Weg in der Xterm-Dokumentation zu finden, aber ich kann nichts über benutzerdefinierte Übersetzungen finden. Antoine Gallix vor 8 Jahren 0