Wie ordnen Sie STRG + A, STRG + E zu, um systemweit als Home, End zu fungieren?

805
ccpizza

Gibt es eine Möglichkeit, STRG + A und STRG + E abzubilden, um systemweit als Anfang der Zeile und entsprechend zum Zeilenende zu arbeiten?

Dh ich möchte, dass diese Verknüpfungen in jeder App nahtlos funktionieren, nicht nur im Terminal (dh wie in OSX).

Mein Hauptsystem ist Ubuntu mit dem Unity-Desktop, aber es wäre gut, eine universelle Lösung zu haben, die Desktop-Agnostiker wäre oder zumindest von Gnome, XFCE und LXDE unterstützt wird.

4
Strg-A wird auch von `screen` verwendet, das ich verwende (sofern nicht 'tmux` verfügbar ist). Sie müssen also zweimal Ctrl-A eingeben, um eine zu erhalten. Ist ein Mausklick nicht schneller, um zur gewünschten Position zu gelangen. ott-- vor 8 Jahren 0
xmodmap macht nicht das, was gefragt wurde (und der vorgeschlagene Link beantwortet diese bestimmte Frage nicht). Thomas Dickey vor 8 Jahren 0
@MariusMatutiae: `xmodmap` kann keine Tastenkombinationen verwenden, es kann nur zur Zuordnung einzelner Schlüssel verwendet werden. @ott: Nein, die Maus muss auf den Bildschirm schauen und an die richtige Stelle zeigen, was sowohl Augen als auch Finger zusätzlich belastet. ccpizza vor 8 Jahren 0
Wenn Sie davon ausgehen, dass Sie das Terminalfenster verwenden, sehen Sie sich das Dienstprogramm stty an. fpmurphy1 vor 8 Jahren 0
@ fpmurphy1: Im Terminal funktionieren STRG + A und STRG + E bereits als Home / End, vorausgesetzt, die Standard-Shell (bash) wird verwendet. ccpizza vor 8 Jahren 0
Vielen Dank für die Klärung Ihrer Anforderungen. Nein, es gibt keine systemweite Möglichkeit, das zu tun, was Sie möchten. fpmurphy1 vor 8 Jahren 0

1 Antwort auf die Frage

3
Thomas Dickey

xmodmapscheint eine Antwort zu sein, tut es aber nicht, da es sich bei den von Ihnen manipulierten Tasten um vorhandene Tasten auf der Tastatur handelt, nicht um modifizierte Tasten. A controlAist ein modifizierter Schlüssel.

xmodmap kann nur vorhandene Schlüsselcodes oder (deren Namen) Tastensymbole neu zuweisen, wie auf der Handbuchseite aufgeführt:

keycode NUMBER = KEYSYMNAME ... = KEYSYMNAME ... KEYSYMNAME = KEYSYMNAME ...
keycode any
keysym

xmodmapFühren Sie den Befehl aus, um die wichtigsten Codes anzuzeigen

xmodmap -pk 

was zeigt so etwas (aus Gründen der Übersichtlichkeit gekürzt):

There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255.  KeyCode Keysym (Keysym) ... Value Value (Name) ...  8 0x0061 (a) 0x0041 (A) 0x00e5 (aring) 0x00c5 (Aring)  9 0x0073 (s) 0x0053 (S) 0x00df (ssharp) 0x00cd (Iacute)  10 0x0064 (d) 0x0044 (D) 0x08ef (partialderivative) 0x00ce (Icircumflex)  11 0x0066 (f) 0x0046 (F) 0x08f6 (function) 0x00cf (Idiaeresis)  12 0x0068 (h) 0x0048 (H) 0x01ff (abovedot) 0x00d3 (Oacute)  13 0x0067 (g) 0x0047 (G) 0x00a9 (copyright) 0x01bd (doubleacute)  14 0x007a (z) 0x005a (Z) 0x07d9 (Greek_OMEGA) 0x00b8 (cedilla) ... 

xev zeigt, was tatsächlich passiert:

KeyPress event, serial 34, synthetic NO, window 0xc00001, root 0x111, subw 0xc00002, time 2209364614, (27,43), root:(47,86), state 0x4, keycode 8 (keysym 0x61, a), same_screen YES, XLookupString gives 1 bytes: (01) "^A" XmbLookupString gives 1 bytes: (01) "^A" XFilterEvent returns: False  KeyRelease event, serial 34, synthetic NO, window 0xc00001, root 0x111, subw 0xc00002, time 2209364773, (27,43), root:(47,86), state 0x4, keycode 8 (keysym 0x61, a), same_screen YES, XLookupString gives 1 bytes: (01) "^A" XFilterEvent returns: False 

Der Steuermodifizierer befindet sich 0x4im Zustand; Die XLookupString(eine von mehreren verwandten Funktionen zum Kombinieren von Schlüsselereignissen) transformiert das Keysym für "a" in ^A(Steuerung / A).

Da für keine der Steuertasten ein Schlüsselzeichen vorhanden ist, ist das erneute Zuweisen von Schlüsselcodes xmodmapfür das Problem von OP nicht möglich.

Um lösen OP das Problem, müßte man muss einen Weg, um das Betriebssystem zu sagen, ( im wesentlichen) verweigern getrennte Ereignisse zu liefern, für controlund A- aber Linux und X funktionieren nicht auf diese Weise. Wenn Sie den Geltungsbereich auf eine bestimmte Anwendung (xterm) oder einen Satz von Anwendungen (Gtk-basierte Programme) beschränken, können Sie diese separat behandeln. Eine systemweit gültige Lösung erscheint jedoch nicht machbar.

Der Benutzer kann mit xev feststellen, welche Ereignisse durch Tastendruck ausgelöst werden steve vor 8 Jahren 0
Ich akzeptiere dies als die Antwort, die im Grunde sagt, dass es nicht möglich ist, welche Imo eine gültige Antwort ist. ccpizza vor 8 Jahren 0
Das ist enttäuschend :( forgetso vor 5 Jahren 0