web-dev-qa-db-ja.com

Linuxで、追加のキーなしで押されたときにSHIFT_L / SHIFT_Rをマップするにはどうすればよいですか?

今日私は Steven Loshによるこの非常に素晴らしい記事 を見つけました。そこでは、彼はいくつかの生産性を高めるキーボードマッピングを紹介しています。その中には、左右のシフトキーの動的マッピングがあります。

アイデア

Shift_LまたはShift_Rを追加のキーなしで押すと、それぞれ '('および ')'にマップされます。それ以外の場合は、通常どおり機能します。

問題

彼はこれらすべてをOSXで行っています。私はLinuxでも同じことを達成しようとしています。 xmodmapを使用してShift_Lのみ用に1つのキーを構成し、修飾キーとして使用する場合はShift用に別のキーを構成することはできないため、これを簡単に行う方法はありません。

私は少しグーグルで調べて、AutoHotKeyを使用して明らかに可能であるWindowsで同じことをしようとしている人々を見つけましたが、Linuxでは何も見つかりませんでした。

Linuxでこれを解決する方法はありますか?

13
gilligan

うわー!元の質問に対するユーザーteikakazuraのコメントは非常に正しいです。これは、事実上、その複製であるだけでなく、 他の質問 であるだけでなく、そこで提供される回答( "use xcape ")が解決します。この問題!

Xcapeリポジトリのクローンを作成してコンパイルした後(最初に、LibXtst-develをFedoraボックスにインストールする必要がありました)、次のコマンドで要求された正確な動作を取得できました。

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

確かに-cursoryテストの後、それは非常にうまく機能しているようです。いいね!

別のオプション

Shiftキーをマウス修飾子として使用する場合(つまり、Shiftキーを押しながら何かをクリックした場合)、xcapeのタイムアウトオプションを含めて、快適なタイムアウト値を見つけて、Shiftキーを単独で押してマウスと組み合わせて使用​​するようにします。偽の括弧を生成しません。 xcape READMEから:

-t <timeout ms>

このタイムアウトより長くキーを保持すると、xcapeはキーイベントを生成しません。デフォルトは500ミリ秒です。

したがって、-tフラグに適切なタイムアウト値を含めることで、Shiftキーを以上押し続けている限り、Shiftキーを押しながらマウスでクリックすることができます。 timeout msミリ秒。

(ここでも、他の質問を指摘するための teika kazura と、元の回答のための don_crissti へのクレジット。)

4
FeRD

これは興味深い課題であり、xinputが完全に適しているとは思えないことに同意します。私はxmodmapの機能をいじくり回して、あなたがやりたいことを達成するのにとてもイライラしてclose来ました...実際にそこにたどり着くことはできませんでした。

Xmodmapを使用すると、parenleftを左シフトキーのシフトキーシンボルとして割り当てることができます。

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

これsortaは、少なくとも私のFedora 17ボックスでのテストでは機能しますが、満足のいく方法ではありません。このマッピングを適切に行っても、Shiftキーは正常に機能し、偽の親をレンダリングしませんでしたが、(イライラすることに)左の親も確実に生成されなかったことがわかりました。何らかの理由で、キーが確実に変更されていないようですそれ自体、シフトされた割り当てを壊します...最初は。何らかの理由で、左シフトを数回続けて押すと、最終的には左親の生成が開始されますが、4回目または5回目のプレスの後でのみです。

1つの動作didただし、「十分に近い」アナログとして操作できる可能性があることに注意してください。parenleftとparenrightをShift_LとShift_Rにマッピングした後、次の方法で確実にparensを入力できることがわかりました。両方のShiftキー間で「ローリング」します。つまり、次のマッピングを使用します。

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

shift_Lを押してからShift_Rを押してから両方を離すと、右パレンまたは左パレンが反対方向に出力されます。 (もちろん、親のマッピングを逆にすることもできます。どちらの方法がより「自然」であるかを完全に判断することはできませんでした。)

それは私があなたが探している正確な振る舞いを達成するようになったのと同じくらい近かった。 xmodmapだけを使用することは可能ではないようです。

私はそれが単に不可能であると半ば確信していました、期間、しかしそれから私はあなたが説明するように正確に機能する少なくとも1つのキーがあることに気づきました:スーパー(「Windows」)キー。 Gnome Shellでは、これは修飾キー(mod4)であり、単独で押すと異なる効果(概要のトリガー)を生成します。したがって、少なくとも理論的には、同じ方法で目的のShiftキーのオーバーロードを実装できる可能性があります。

...しかし、それがどのように行われるのか、Shiftキーを押すたびに必要な処理で行き詰まるのがどれほど侵襲的であるのかはまったくわかりません。 :-)

1
FeRD

xbindkeysを見て、キーマッピングを変更したり、vimやgeditなど、使用したり独自にコーディングしたりするのに適したコーディングプラグインを見つけたりすることができます。

キーマップを変更するためのツール https://stackoverflow.com/questions/6812/mapping-my-custom-keys-in-debian

多分 http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-14.html

それを有効にするスクリプトを書きます。

0
xtextedx