X端末でダブルクリックの動作を設定する方法は?


15

さまざまなUnix / Linuxシステムの下で、X端末アプリケーション(xtermなど)で異なるダブルクリック動作を観察しました。

ダブルクリックすると、次の非アルファベット文字まで左と右のすべてが選択される場合があります(たとえば、カーソルの下の単語が選択されます)。

時々、次の空白/ eolが選択されるまでのすべて(例えば、カーソルの下のフルパスが選択されます)。

ダブルクリックの動作を設定するにはどうすればいいですか-たとえば-xtermで(ほとんどのシステムで利用できるため)

現在、ほとんどのユースケースでは、2番目のモードの方が便利です。

回答:


19

Xリソースでそれを行います。.Xresourcesこれらのxterm関連のリソースを含むファイルがあります。

XTerm*VT100.cutNewLine: false
XTerm*VT100.cutToBeginningOfLine: false
XTerm*VT100.charClass: 33:48,35:48,37:48,42:48,45-47:48,64:48,95:48,126:48

私の.xinitrcファイルには、これらのリソースにマージするいくつかの行があります。

if [ -f $userresources ]; then
    /usr/X11/bin/xrdb -merge $userresources
fi

これらの行は、xtermをダブルクリックし、トリプルクリックで私が好きなことをします:

ダブルクリックすると、「単語」がスラッシュ(/)、ドット(。)、アスタリスク(*)、およびその他の非英数字を含むと見なされます。それが「charClass」リソースです。私がやりたいことをさせるには、そのcharClassを退屈にいじる必要がありました。ほとんどの場合、URLと完全修飾または部分修飾パスをダブルクリックして強調表示できます。

他の2行では、マウスの下の単語からトリプルクリックが開始され、行の最後に移動しますが、改行は含まれません。そうすれば、実行したコマンドをトリプルクリックして別のウィンドウに貼り付けることができ、改行がないため、別のウィンドウで実行する前に編集できます。

Arch Wikiにはxtermリソースに関するセクションを含むXリソースに関する記事がありますが、これらのxtermリソースは完全ではありません。


1
Wikiは便利ですが、xtermリソースを参照する場所はマニュアルページです。
トーマスディッキー

またはを使用しますXTerm*VT100.charClass: 0-32:0,33-65535:1。ダブルクリックすると、「単語」は空白(および制御文字)を除く記号のシーケンスと見なされます。
ニュートンx

空白のルールは、たとえばjson onelinerで引用符の内側にあるものを取得したい場合には役に立ちません。しかし、私はそれがあなたが持っている使用法に依存すると思います。この回答で提供されているスニペットは私に最適です。
ジャン=ベルナールヤンセン

間違いがあります:cutNewLine-> cutNewline。たぶんそれは新しいバージョンで導入されました。
x-yuri

1
そしてonNClicks: regex、少なくともより読みやすいようです。
x-yuri

5

xterm 選択のためのダブルクリックおよびトリプルクリックに関連するいくつかのリソース設定があります(マニュアルページには、関連するすべてのリソースがリストされています)。

cutNewline(クラスCutNewline
「false」の場合、行を選択するためにトリプルクリックしても、行の最後に改行は含まれません。「true」の場合、改行が選択されます。デフォルトは「true」です。

cutToBeginningOfLine(クラスCutToBeginningOfLine
「false」の場合、行を選択するためにトリプルクリックすると、現在の単語からのみ選択されます。「true」の場合、行全体が選択されます。デフォルトは「true」です。

on2Clicks(クラスOn2Clicks)
on3Clicks(クラスOn3Clicks)
複数のマウスクリックに対する選択動作を指定します。マウスのシングルクリックは、選択機能セクションで説明されているように常に解釈されます(POINTER USAGEを参照)。複数のマウスクリック(select-startアクションをアクティブにするボタンを使用)は、on2Clicksなどのリソース値に従って解釈されます。リソース値は次のいずれかです。

word
charClassリソース によって決定される「単語」を選択します。文字クラスのセクションを参照してください。

line
行を選択します(折り返しをカウント)。

group
隣接する行のグループを選択します(折り返しをカウント)。選択は空白行で停止し、現在のページの外側には広がりません。

page
表示されているすべての行、つまりページを選択します。

all
保存された行を含むすべての行を選択します。

regex
リソース値に続く正規表現によって決定される「単語」を選択します。

none
このリソースに関連付けられた選択アクションはありません。Xtermはそれをリストの最後と解釈します。たとえば、on3Clicksを「なし」に設定することにより、トリプル(およびそれ以上)クリックを無効にするために使用できます。

およびのデフォルト値はon2Clickson3Clicksそれぞれ"word"および "line"です。on4Clicks またはon5Clicksにデフォルト値はなく、これらを非アクティブにします。xterm は、起動時に、設定されているonXClicks リソース値によって最大クリック数を決定します。


マニュアルに書かれていないこと:一部のディストリビューションでは、デフォルトは文書化されたデフォルトではありません。空のcharClassリソースを設定すると、文書化されたデフォルトが復元されます。charClassに指定したものは、指定したエントリのみを上書きします。指定されていないエントリは、文書化されたデフォルトに復元されます。少なくとも、それは私にとってうまくいくように見えます。
ジェフリアマン

私はに実行した後に以下の値をお勧め:xterm*on2Clicks: regex [^/@ \n]+xterm*on3Clicks: regex [^ \n]+xterm*on4Clicks: regex [^#$]+xterm*on5Clicks: line。受け入れられた答えにあるものよりもよく、理解しやすいようです。
x-yuri

考え直して、今のところ、私は両方のアプローチのベストを取得することを決めました(少なくとも私が今理解している方法):単語の2クリック、WORDの3クリック(vim意味でxterm*on3Clicks: regex [^ \n]+)、コピーの4クリックシェルからコマンド(現在の単語から行末までを、xterm*on4Clicks: linexterm*cutNewline: falsexterm*cutToBeginningOfLine: false)、行全体のために5クリック(xterm*on5Clicks: regex [^\n]+)。
x-yuri
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.