Wie kann ich unter Linux SHIFT_L / SHIFT_R zuordnen, wenn ich ohne zusätzliche Taste drücke?

13

Heute fand ich diesen sehr schönen Artikel von Steven Losh, in dem er einige produktivitätssteigernde Tastaturzuordnungen vorstellt. Darunter befindet sich eine dynamische Zuordnung der linken und rechten Umschalttaste.

Die Idee

Wenn Shift_L oder Shift_R ohne eine zusätzliche Taste gedrückt werden, werden sie '(' und ')' zugeordnet, ansonsten funktionieren sie wie gewohnt.

Das Problem

All dies macht er unter OSX. Ich versuche das gleiche unter Linux zu erreichen. Dies ist nicht ohne Weiteres möglich, da meines Wissens nicht mit xmodmap eine Taste nur für Shift_L und eine andere für Shift als Zusatztaste konfiguriert werden kann.

Ich habe ein bisschen gegoogelt und Leute gefunden, die versucht haben, dasselbe unter Windows zu tun, was anscheinend mit AutoHotKey möglich ist, aber ich konnte nichts für Linux finden.

Gibt es eine Möglichkeit, dies unter Linux zu lösen?

Gilligan
quelle
Ich habe es nicht ausprobiert, aber das könnte helfen askubuntu.com/q/24916/11352
Mansuro
2
Es ist fast doppelt zu dieser Frage . =)
teika kazura

Antworten:

4

Beeindruckend! Der Kommentar des Benutzers teika kazura zu der ursprünglichen Frage ist ganz richtig - dies ist nicht nur effektiv ein Duplikat dieser anderen Frage , sondern die dort angegebene Antwort ("use xcape ") löst dieses Problem!

Nachdem ich das xcape-Repo geklont und kompiliert hatte (ich musste zuerst libXtst-devel auf meiner Fedora-Box installieren), konnte ich mit dem folgenden Befehl das genaue gewünschte Verhalten erzielen:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

Nach zugegebenermaßen flüchtigen Tests scheint es sehr gut zu funktionieren . Nett!

Andere Optionen

Wenn Sie die Umschalttaste als Mausmodifikator verwenden (dh, wenn Sie jemals auf etwas klicken), möchten Sie wahrscheinlich die Timeout-Option von xcape einbeziehen und einen komfortablen Timeout-Wert finden, damit die in Kombination mit der Maus verwendete Solo-Umschalttaste gedrückt wird erzeugen keine falschen Klammern. Aus der xcape README:

-t <timeout ms>

Wenn Sie einen Schlüssel länger als dieses Zeitlimit halten, generiert xcape kein Schlüsselereignis. Die Standardeinstellung ist 500 ms.

Wenn Sie also das -tFlag mit einem für Sie geeigneten Timeout-Wert einfügen, können Sie mit der Maus bei timeout ms gedrückter Umschalttaste mindestens Millisekunden lang auf die Umschalttaste klicken .

( Nochmals ein Dank an teika kazura für den Hinweis auf die andere Frage und an don_crissti für die ursprüngliche Antwort dort.)

FeRD
quelle
Ein Problem bei dieser Methode ist, dass ich ziemlich oft [Umschalttaste] + [Maus] drücke, um Text in Editoren auszuwählen. Interessanterweise verwendet Sublime Text auch [Ctrl] + [LMouse], sodass die Frage nach dem erneuten Zuordnen von [Ctrl] ebenfalls Probleme verursacht.
AnnanFay
@Annan Hast du schon mit dem Anpassen der Timeout-Option von xcape experimentiert? In der README- -t <timeout ms>Datei heißt es : " Wenn Sie eine Taste länger als dieses Zeitlimit gedrückt halten, generiert xcape kein Schlüsselereignis. Die Standardeinstellung ist 500 ms." ... Es sei denn, xcape stört das Key-Down-Ereignis des Modifikators (ich kann mich nicht erinnern), sollte dies verhindern, dass unechte Tastendrücke erzeugt werden, und Sie können es dennoch als Mausauswahl-Modifikator verwenden, solange Sie es lang genug halten .
Ferd
@Annan Das freut mich zu hören, ich habe meine Antwort aktualisiert, um die Verwendung der -tFlagge vorzuschlagen !
Ferd
1

Es ist eine interessante Herausforderung, und ich stimme einer zu, für die xinput nicht perfekt geeignet zu sein scheint. Ich habe einige Zeit damit verbracht, an den Fähigkeiten von xmodmap herumzuspielen, und war so frustrierend nahe daran, das zu erreichen, was Sie tun möchten ... ohne es tatsächlich zu schaffen, dorthin zu gelangen.

Mit xmodmap ist es möglich, parenleft als verschobenes Tastensymbol auf der linken Umschalttaste zuzuweisen:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

welches sorta funktioniert, zumindest beim testen auf meiner fedora 17 box, aber nicht in befriedigender weise. Ich stellte fest, dass mit dieser Zuordnung die Umschalttaste immer noch normal funktionierte und keine falschen Parens wiedergab, aber (frustrierend) auch keine zuverlässigen linken Parens erzeugte. Aus irgendeinem Grund scheint der Schlüssel nicht zuverlässig ändern sich , was seine verschobene Zuordnung bricht ... zunächst. Aus welchem ​​Grund auch immer, ein paar Mal nacheinander die linke Verschiebung zu drücken, würde dazu führen, dass die Produktion von linken Parens beginnt, jedoch erst nach dem vierten oder fünften Druck.

Ein Verhalten, das mir jedoch aufgefallen ist, dass Sie möglicherweise als "nah genug" -Analog arbeiten können: Nach dem Zuordnen von parenleft und parenright zu Shift_L und Shift_R konnte ich Parens zuverlässig eingeben, indem ich über beide Shift-Tasten "rollte" - Mit anderen Worten, mit diesem Mapping:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

Wenn Sie Shift_L gefolgt von Shift_R drücken und dann beide loslassen, wird ein Rechts- oder ein Links-Paren in die andere Richtung ausgegeben. (Die Parenzuordnungen könnten natürlich umgekehrt werden; ich konnte mich nicht so recht entscheiden, wie ich mich "natürlicher" fühlte.)

Das war so nah, wie ich dem genauen Verhalten, das Sie suchen, nahe gekommen bin. Es scheint nicht möglich zu sein, nur xmodmap zu verwenden.

Ich war halbwegs überzeugt, dass es einfach nicht möglich ist, Punkt, aber dann wurde mir klar, dass es mindestens eine Taste gibt, die genau so funktioniert , wie Sie es beschreiben: Die Super-Taste ("Windows"). Unter Gnome Shell ist es eine Modifikationstaste (mod4), die einen anderen Effekt erzeugt (Overview auslöst), wenn sie alleine gedrückt wird. Zumindest theoretisch ist es also möglich, die gewünschte Umschalttastenüberladung auf dieselbe Weise zu implementieren.

... Aber ich habe absolut keine Ahnung, wie das gemacht würde oder wie invasiv es wäre, jedes Mal, wenn Sie die Umschalttaste drücken, in der notwendigen Verarbeitung festzusacken. :-)

FeRD
quelle