如何在X终端中配置双击行为?


16

在不同的Unix / Linux系统下,我在X终端应用程序(例如xterm)中观察到了不同的双击行为。

有时,双击会左右选择所有内容,直到下一个非字母字符为止(例如,它选择了光标下的单词)。

有时,直到选择下一个空格/ eol之前的所有内容(例如,选择光标下方的完整路径)。

我如何在xterm中配置双击行为(例如,因为大多数系统上都可以使用)?

目前,我发现第二模式对于大多数用例而言更为方便。

Answers:


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以及完全限定或部分限定的路径以突出显示它们。

其他两行从鼠标下方的单词开始三次单击,然后转到该行的末尾,但不包括任何新行。这样,您可以三次单击刚刚执行的命令,将其粘贴到另一个窗口中,并且由于它没有换行符,因此您可以在另一个窗口中运行它之前对其进行编辑。

Arch Wiki上有一篇有关X资源文章,其中包括有关xterm资源的部分,但是这些xterm资源并不完整。


1
Wiki可能有用,但是可以查阅xterm资源的地方是其手册页
Thomas Dickey

或使用XTerm*VT100.charClass: 0-32:0,33-65535:1。然后双击将认为“单词”是除空格(和控制字符)之外的任何符号序列。
Newtonx

如果要获取引号内的内容(例如,在json oneliner中),则空格规则不好。但是我想这取决于您的用法。此答案中提供的代码段非常适合我。
Jean-Bernard Jansen

您有一个错误: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)。根据on2Clicks等的资源值来解释多次单击鼠标(使用激活选择开始操作的按钮)。资源值可以是以下之一:

word
选择一个由charClass资源确定的“单词” 。请参阅“ 字符类”部分。

line
选择一行(计数换行)。

group
选择一组相邻的线(计数环绕)。选择停止在空白行上,并且不会扩展到当前页面之外。

page
选择所有可见线,即页面。

all
选择所有行,即包括已保存的行。

regex
选择一个由资源值后面的正则表达式确定的“单词”。

none
没有选择动作与此资源相关联。Xterm将其解释为列表的末尾。例如,您可以通过将on3Clicks设置为“无”来使用它来禁用三次(或更高)的点击。

为默认值on2Clicks,并on3Clicks“字”“线”,分别。on4Clicks 或的默认值on5Clicks无效,因此这些值均处于非活动状态。启动时,xterm 通过设置的onXClicks 资源值确定最大点击次数。


手册没有告诉您的内容:对于某些发行版,默认值不是记录的默认值。设置一个空的charClass资源将还原记录的默认值。您为charClass指定的任何内容都只会覆盖您指定的条目。未指定的条目将还原为记录的默认值。至少,这似乎对我有用。
杰夫·里尔曼

我碰到一个帖子暗示以下值:xterm*on2Clicks: regex [^/@ \n]+xterm*on3Clicks: regex [^ \n]+xterm*on4Clicks: regex [^#$]+xterm*on5Clicks: line。似乎比接受的答案更好,更容易理解。
x-yuri

经过深思熟虑,现在我决定最好地使用这两种方法(至少以我现在所理解的方式):2次单击一个单词,3次单击一个单词(按其vim含义xterm*on3Clicks: regex [^ \n]+),4次单击进行复制从外壳命令(从当前字到行的结尾,xterm*on4Clicks: linexterm*cutNewline: falsexterm*cutToBeginningOfLine: false),5点击整行(xterm*on5Clicks: regex [^\n]+)。
x-yuri
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.