追加読書

追加読書

Ctrl + LeftArrowをターミナルの前の単語(XWindowSystemなし)にバインドしてみました。

しかし、Ctrl + LeftArrowとLeftArrowが端末で同じエスケープシーケンスを生成することを観察しました。

  1. 私はCtrl + Vを押します
  2. 左矢印を押す
  3. 私は受け取った^[[D
  4. 私はCtrl + Vを押します
  5. Ctrl+左矢印を押します
  6. 私は受け取った^[[D

Ctrl+右矢印にも同じ問題があります。どうすれば解決できますか?

(Debian: Linux v4.19.0-8-amd64)

ベストアンサー1

^[[D左矢印で得た。

Ctrl - 左側はLinux VCとxtermに^[[151あります。^[[1;5D


man keymaps持っている:

 Which  of  the actions bound to a given key is taken when it is pressed depends on what
   modifiers are in effect at that moment.  The  keyboard  driver  supports  9  modifiers.
   These  modifiers  are  labeled  (completely  arbitrarily)  Shift,  AltGr, Control, Alt,
   ShiftL, ShiftR, CtrlL, CtrlR and CapsShift.  Each of these modifiers has an  associated
   weight of power of two according to the following table:

          modifier            weight

          Shift                  1
          AltGr                  2
          Control                4
          Alt                    8
          ShiftL                16
          ShiftR                32
          CtrlL                 64
          CtrlR                128
          CapsShift            256

ShiftとControlと同様に、2つの「Alt」キーが同じ操作を実行するように変更しました。

例:キーマップファイルloadkeys

# three modifiers -> 8 cols. (AltGr missing):
#
keymaps 0-1,4-5,8-9,12-13

それから:

# left modifiers
keycode  42 = Shift
keycode  29 = Control
keycode  56 = Alt
keycode  58 = Caps_Lock
# right side...just Alt
keycode  54 = Shift
keycode  97 = Control
keycode 100 = Alt

通常、100 = AltGrです。

その後、デフォルトの「左」の後に2つの追加タスクを追加しました。

keycode 105 = Left F150 F151
  string F150 = "\033[150"
  string F151 = "\033[151"

これは2段階のプロセスでなければなりません。 「F150」は、変更されたキーを文字列に関連付けるために使用されるラベルです。

矢印キー(105)は以前のように「左」を生成しますが、ShiftとControlは選択されたエスケープシーケンスを生成します。

それから~/.inputrc

# Moving - modif. L+R Arrows in linux VC
# ascii codes in X / evdev / xterm
#
"\e[150":  backward-word
"\e[1;2D": backward-word
"\e[154":   forward-word
"\e[1;2C":  forward-word

"\e[151":  shell-backward-word
"\e[1;5D": shell-backward-word
"\e[155":   shell-forward-word
"\e[1;5C":  shell-forward-word

1;2D振り返ってみると、Xが作ったものを選んだはずだった。これはいくつかの inputrc 行を保存します。しかし、これらのエスケープシーケンスは私にとってやや不透明に見えたので、独自のエスケープシーケンスを定義しました。


修飾子マッピングを記述するには、次のようにします。

# "Print Screen Sys Rq" is Nr 99
#
keycode 99 =  F91 F92 F93 nul F95 F96
 string F91 = " --help\n"
 string F92 = " |less"
 string F93 = " |grep "
 string F95 = "()\033[D"
 string F96 = "echo \'\033[4~\'"

--helpこれで、以前使用していなかった「印刷」キーを押してプラスを書き込むことができますEnter。 Xは「印刷」キーも無視するため、これはLinux VCでのみ機能し、XKBではこれを有効にする方法が見つかりませんでした。

「nul」エントリは「Shift + Control」の位置であり、渡されます。重量「Alt」の前に表示されます。

keymaps 0-1,4-5,8-9,12-13:数値「0,1,4,5,8」は、「F95」のある 5 番目の位置に重み「8」を入れます。 「8」は「Alt」と定義されます。値2のAltGr重みをスキップしたいので、2,3,6,7がありません。


10個のFキーとShift、Control、Alt(左または右なし)の8つの組み合わせを組み合わせると、必要に応じて80のさまざまなキー機能が得られます。しかし、Shift + Control-F6を使って1つのことを行い、Control + Alt-F9を使って別のことをしたい人は誰ですか?

おすすめ記事