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


13

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

アイデア

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

問題

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

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

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


それが、このかもしれないのヘルプ、私は試していないaskubuntu.com/q/24916/11352
Mansuro

2
この質問とほとんど同じです。=)
かずら亭花2013

回答:


4

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

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

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

当然のことながら、テストは非常にうまくいくようです。いいね!

他のオプション

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

-t <timeout ms>

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

その-tため、タイムアウト値にフラグを含めると、Shiftキーを少なくとも timeout msミリ秒押し続ける限り、マウスでShiftキーを押しながらクリックすることができます。

(クレジット、再び、と定家カズラ他の質問を指摘し、またするためdon_crisstiがオリジナルの答えを。)


この方法の問題の1つは、[Shift] + [LMouse]を押してエディターでテキストを選択することです。興味深いことに、Sublime Textは[Ctrl] + [LMouse]も使用するため、[Ctrl]の再マッピングに関する質問でも問題が発生します。
-AnnanFay

@Annan xcapeのタイムアウトオプションの調整を試しましたか?READMEから:「-t <timeout ms>このタイムアウトよりも長いキーを保持すると、xcapeはキーイベントを生成しません。デフォルトは500ミリ秒です。」... xcapeがモディファイヤのキーダウンイベントに干渉しない限り(思い出せない)、偽のキープレスが生成されないようにする必要があります。 。
-FeRD

@Annan聞いてうれしい、答えを更新して-tフラグの使用を提案しました!
-FeRD

1

これは興味深い挑戦であり、xinputが完全に適しているとは思えないことに同意します。私はxmodmapの機能をいじるのに少し時間を費やしましたが、実際にそこにたどり着くことなく、あなたがやりたいことを達成することにイライラして近づきました。

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

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

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

しかし、私気づいた1つの動作、「十分に近い」アナログとして使用できる可能性があることです:parenleftとparenrightをShift_LとShift_Rにマッピングした後、両方のシフトキーを「ローリング」することで確実にparensを入力できることがわかりました—言い換えると、このマッピングでは:

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キーを押すたびに必要な処理が行き詰まるのは、どのように行われるのか、またはどれほど侵襲的であるのかはまったくわかりません。:-)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.