web-dev-qa-db-ja.com

CTRL + A、CTRL + Eをホーム、エンドシステム全体として機能するようにマップする方法は?

CTRL + AとCTRL + Eをマップして機能するようにする方法はありますかシステム全体行の先頭に移動し、それに応じて行の終わりに移動しますか?

つまりこれらのショートカットが、ターミナルだけでなく(つまり、OSXのように)どのアプリでもシームレスに機能するようにしたいと思います。

私のメインシステムはUnityデスクトップを備えたUbuntuですが、デスクトップに依存しない、または少なくともGnome、XFCE、LXDEでサポートされるユニバーサルソリューションがあると便利です。

6
ccpizza

xmodmap は答えを提供しているように見えるかもしれませんが、そうではありません。keycodes操作するのはキーボード上の既存のキーであり、変更キー。 A controlA 修飾キーです。

xmodmapは、マニュアルページにリストされているように、既存のキーコードまたは(それらの名前の)keysymsのみを再割り当てできます。

keycode[〜#〜] number [〜#〜] = [〜# 〜] keysymname [〜#〜].。
keycodeany= [〜#〜] keysymname [〜#〜].。
keysym[〜#〜] keysymname [〜#〜] =- [〜#〜] keysymname [〜#〜].。

xmodmapが知っているキーコードを確認するには、

xmodmap -pk

これは次のようなものを示しています(わかりやすくするために短縮されています):

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は、実際に何が起こるかを示しています。

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

制御修飾子は、状態の0x4です。 XLookupString(キーイベントを組み合わせるためのいくつかの関連関数の1つ)は、「a」のkeysym^A(control/A)に変換します。

どのコントロールキーにもkeysymがないため、OPの問題でxmodmapを使用してキーコードを再割り当てすることはできません。

solve OPの問題を解決するには、オペレーティングシステムに(本質的に)個別のイベントの配信を拒否するように指示する方法が必要になります。 control そして A —しかし、LinuxとXはそのようには機能しません。スコープを特定のアプリケーション(xterm)またはアプリケーションのセット(Gtkベースのプログラム)に限定すると、それらを個別に扱うことができます。しかし、システム全体に適用されるソリューションは実行可能ではないようです。

5
Thomas Dickey