xterm
またはvim
xtermでマウスを使用できる他のアプリケーションでは、キーを押してShiftマウスボタンの処理をバイパスし、一般的なX選択を行うことができました。
Debian の xterm バージョン 361 の最新アップデートでは動作しなくなりました。では、vim
Shift + LeftButtonが下にスクロールしているように見えます。と入力してprintf '\e[?1000h'
Shift + LeftButtonを押すと、次の内容が送信されることがわかります\e[M$xy
。
以前の行動に戻るにはどうすればよいですか?それとも、Xマウスの選択が正しく機能するようにする他の方法はありますかvim
(またはマウスプロトコルが有効になっている他のアプリケーション)?
FWIW、私が考えることができるすべてのカスタマイズを無効にしても、次のことを再現できます。
xrdb < /dev/null
env -i DISPLAY="$DISPLAY" xterm -class MYXTerm -name myxterm -e \
vim -u NONE -c 'set mouse=a' -c help
(そしてvimヘルプ画面でShift + LeftMouseButtonを試してください)。
両方とも、xterm 361 Debianパッケージとデフォルト設定を使用してソースから構築されたxtermが含まれています。
編集する。再起動後に問題がなくなりましたが、最終的にはNumLockが無効になったためです。だから、正しい: 「問題」は NumLock をオンにした場合にのみ発生します。
答え1
OPコメント:
「問題」は、次の場合にのみ表示されます。
NumLock
(mod2
修飾子)がオンになっています。
そしてエクスタム #361、これは意図的なものです:
使用ルールの変更移動する- キーのオーバーライドマウスプロトコル~のため選択/貼り付け選択/貼り付け操作に実際にバインドされているマウスボタンに機能を制限します。
xtermの使用Xツールキット翻訳する修飾子を含むさまざまなキーとマウス(ポインター)ボタンをジョブリソースにバインドします。ほとんどの人が使う基本翻訳、Xリソースに何かを追加した可能性があります。翻訳機能は比較的静的であるため、xtermは以下を実装します。マウスプロトコル選択/貼り付けジョブに表示されるイベントを調べて、次の操作を行います。
#361(参照)源泉)、xtermは起動時に翻訳リソースをチェックして、どのポインタ(マウス)ボタンがこれらのイベントにバインドされているかを確認し、Shift修飾子のみを使用して一致するボタンイベントを受け取ると、マウスプロトコルを無視して選択/貼り付けを実行します。 (かなり長い間行われているからです。)
変更の理由は、アプリケーションがいくつかの組み合わせです(例:移動するホイールマウスを使用)解釈可能なエスケープシーケンスを受信します。
翻訳リソースでは、これらの特別な変換処理については説明しません。
~Meta <Btn1Down>:select-start() \n\
~Meta <Btn1Motion>:select-extend() \n\
ただし、xtermのマウスプロトコルは、翻訳で実際に定義されていないイベントを受信する能力に依存します。 #361 後には良くないことを見ましたスポーツイベントこの変更されたシナリオと一致します(修正は#362にあります)。
私は通常xmodmapを使って定義します。円この翻訳を使用できるようにキーを入力してください。 macOSディスプレイの場合、次のものがあります。
xmodmap: up to 2 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x40), Shift_R (0x44)
lock Caps_Lock (0x41)
control Control_L (0x43), Control_R (0x46)
mod1 Alt_L (0x42), Alt_R (0x45)
mod2 Meta_L (0x3f), Meta_R (0x47)
mod3
mod4
mod5
Debianに表示される変更されていないxmodmapは異なります。
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
〜する円後者の場合、アクセスは可能ですが、それほど便利ではありません。複数のモードスイッチが必要です。
保留中のプル要求など、他に探索する必要がある問題領域があります。_XtMatchUsingDontCareModsに欠落している非標準修飾子を無視しないでください。、これは使用を妨げます。mod2
~のため円(xtermがエスケープシーケンスに変換するいくつかのイベントを削除して)