xmodmapを使用したVimのようなコントロール

前の記事で説明したVimのようなコントロールの実装には、いくつかの重大な欠点があります。GTK環境にのみ適し、編集可能な要素の上にカーソルを移動するには修飾キーが必要です。 一般的に、コメントで正しく指摘されているように、Vimのようなものではありません。 したがって、xmodmapとコマンドシェルを使用して、湾曲したキーボード環境を構築した経験を説明することにしました。





最初に行うことは、xmodmapのリソースファイル用のディレクトリを作成することです(例:〜/ .keytoggle)。



2つ目は、現在のキーボードレイアウトを削除することです。
$xmodmap -pke >~/.keytoggle/input-keymap.rc
      
      







次に、ファイルを作成します

〜/ .keytoggle / control-keymap.rc
 !{{{ override latin keycode 24 = q Q keycode 25 = w W keycode 26 = e E keycode 27 = r R keycode 28 = t T keycode 29 = y Y keycode 30 = u U keycode 31 = i I keycode 32 = o O keycode 33 = p P keycode 34 = bracketleft keycode 35 = bracketright keycode 38 = a A keycode 39 = s S keycode 40 = d D keycode 41 = f F keycode 42 = g G keycode 43 = h H keycode 44 = j J keycode 45 = k K keycode 46 = l L keycode 47 = semicolon colon keycode 48 = apostrophe quotedbl keycode 49 = Escape Escape Escape Escape !keycode 49 = grave asciitilde keycode 52 = z Z keycode 53 = x X keycode 54 = c C keycode 55 = v V keycode 56 = b B keycode 57 = n N keycode 58 = m M keycode 59 = comma less keycode 60 = period greater !}}} !{{{ override numbers ! keycode 10 = 1 exclam 1 1 exclam ! keycode 11 = 2 at 2 2 quotedbl ! keycode 12 = 3 numbersign 3 3 numerosign ! keycode 13 = 4 dollar 4 4 semicolon ! keycode 14 = 5 percent 5 5 percent ! keycode 15 = 6 asciicircum 6 6 colon ! keycode 16 = 7 ampersand 7 7 question ! keycode 17 = 8 asterisk 8 8 asterisk ! keycode 18 = 9 parenleft 9 9 parenleft ! keycode 19 = 0 parenright 0 0 parenright !}}} !{{{ bindings !esc keycode 9 = grave asciitilde !h keycode 43 = Left Left !j keycode 44 = Down Down !k keycode 45 = Up Up !l keycode 46 = Right Right !p keycode 33 = Prior Prior !n keycode 57 = Next Next !d !keycode 40 = Delete Delete ![ keycode 34 = Home Home !] keycode 35 = End End !m keycode 58 = F7 !}}}
      
      







すべてのバインディングはコメントで説明されていますが、私の場合、リマップはCtrl-CapsLock、Esc-、およびさらにいくつかの個人的なリマップです。



実際、入力編集モードの切り替えは、必要なリソースでxmodmapを実行するだけで実行されます。 いくつかのホットキーをハングアップするか、次のようなスクリプトを記述できます。

〜/ bin / kt
 #!/bin/bash DIR="$HOME/.keytoggle" function toggle(){ if [ -e $DIR/lock ] then xmodmap $DIR/input-keymap.rc rm $DIR/lock else xmodmap $DIR/control-keymap.rc touch $DIR/lock fi } function show(){ if [ -e $DIR/lock ] then echo -- else echo -- INSERT -- fi } case $1 in t) toggle;; *) show;; esac
      
      







「kt t」を呼び出すと、引数なしでモードが変更されます。osd_catまたはその他の通知機能を介して、ウィンドウマネージャーのステータス行に表示できる状態を標準出力に送信します。 たとえば、次のように:

〜/ .ion3 / main / cfg_statusbar.lua
 mod_statusbar.create{ screen=0, pos='bl', fullsize=true, systray=true, template="%date".. "[ %>workspace_name ]".. "[ %exec_xkb ]".. "[ M: %exec_mounted ]".. "%filler".. "%>exec_lt" } mod_statusbar.launch_statusd{ load={ update_interval=10*1000, }, date={ date_format='[ %H:%M ]', }, exec = { lt={ program = "mps s", retry_delay = 3 * 1000, }, xkb={ program = "kt", retry_delay = 1 * 1000, }, mounted={ program ="fmounted", retry_delay=2 * 1000, }, } }
      
      







最後のコードは、モードスイッチをホットキーに掛けることです。 たとえば、スイッチは<Super_R>に割り当てられました。

 $grep 'kt t' ~/.ion3/main/cfg_ion.lua kpress("Super_R", "ioncore.exec_on(_, 'kt t')"),
      
      







この実装は、使用するツールキットに依存しませんが、rdpを介してWindowsで多くの作業を行わなければならないVimファンにも喜ばれると思います。



なぜ私はこれをすべて拒否したのですか? 私が毎日必要とするほとんどすべてのソフトウェアには、すぐに使えるV​​imスタイルのコントロールがあります。 その結果、追加のキーボードモードの必要性はなくなりました。 彼は、いくつかの入力フィールド(webkit、dwbコマンドライン)で前の記事で説明したmod1 + [hjklqw]の組み合わせに置き換えられました。 ちなみに、私はVimで編集するときにこのようなホットキーも使用します。モードを変更するよりも速い場合があります。



All Articles