Como configurar o comportamento do clique duplo em um terminal X?

15

Em diferentes sistemas Unix / Linux, observei um comportamento diferente de clique duplo em aplicativos de terminal X (por exemplo, xterm).

Às vezes, um clique duplo seleciona tudo à esquerda e à direita até o próximo caractere não alfabético (por exemplo, seleciona a palavra sob o cursor).

Às vezes, tudo até que o próximo espaço em branco / eol seja selecionado (por exemplo, caminhos completos sob o cursor são selecionados).

Como posso configurar o comportamento do clique duplo - digamos - no xterm (porque está disponível na maioria dos sistemas)?

Atualmente, acho o segundo modo mais conveniente para a maioria dos casos de uso.

maxschlepzig
fonte

Respostas:

19

Você faz isso com recursos X. Eu tenho um arquivo .Xresources,, que contém estes recursos relacionados ao 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

No meu .xinitrcarquivo, tenho alguma linha que se funde nesses recursos:

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

Essas linhas fazem o xterm clicar duas vezes e clicar três vezes no que eu gosto:

O clique duplo considera uma "palavra" para incluir barra (/), ponto (.), Asterisco (*) e alguns outros caracteres não alfanuméricos. Esse é o recurso "charClass". Eu tive que fazer algumas brincadeiras tediosas com esse charClass para fazer o que eu queria. Isso permite clicar duas vezes em URLs e caminhos totalmente ou parcialmente qualificados para destacá-los.

As outras duas linhas fazem com que o clique triplo comece da palavra sob o mouse e vá para o final da linha, mas não inclui nenhuma nova linha. Dessa forma, você pode clicar três vezes em um comando que acabou de executar, colá-lo em outra janela e, como não possui nova linha, é possível editá-lo antes de executá-lo na outra janela.

O Arch Wiki possui um artigo sobre recursos X , incluindo uma seção sobre recursos xterm, mas esses recursos não estão completos.

Bruce Ediger
fonte
1
Os wikis podem ser úteis, mas o local a consultar para obter recursos xterm é sua página de manual .
Thomas Dickey
Ou use XTerm*VT100.charClass: 0-32:0,33-65535:1. O clique duplo considerará uma "palavra" como qualquer sequência de símbolos, excluindo espaço em branco (e caracteres de controle).
Newtonx 28/02
A regra de espaço em branco não é boa se você deseja obter o que há dentro de aspas, em um json oneliner, por exemplo. Mas acho que depende do uso que você tem. O trecho fornecido nesta resposta é perfeito para mim.
Jean-Bernard Jansen
Você tem um erro: cutNewLine-> cutNewline. Talvez isso tenha sido introduzido em versões mais recentes.
X-yuri
1
E onNClicks: regexparece pelo menos mais legível.
X-yuri
5

xterm possui várias configurações de recursos relacionadas ao clique duplo e triplo para seleção (a página de manual lista todos os recursos relevantes):

cutNewline(classe CutNewline)
Se "false", clicar três vezes para selecionar uma linha não inclui a nova linha no final da linha. Se "true", a nova linha é selecionada. O padrão é verdadeiro".

cutToBeginningOfLine(classe CutToBeginningOfLine)
Se "falso", clicar três vezes para selecionar uma linha seleciona apenas da palavra atual para a frente. Se "true", a linha inteira é selecionada. O padrão é verdadeiro".

on2Clicks(classe On2Clicks)
on3Clicks(classe On3Clicks)
Especifique o comportamento da seleção em resposta a vários cliques do mouse. Um único clique do mouse é sempre interpretado como descrito na seção Funções de Seleção (consulte USO DO PONTEIRO ). Vários cliques do mouse (usando o botão que ativa a ação de seleção e início) são interpretados de acordo com os valores de recurso do on2Clicks, etc. O valor do recurso pode ser um destes:

word
Selecione uma "palavra", conforme determinado pelo recurso charClass . Veja a seção CARACTER CLASSES .

line
Selecione uma linha (contando quebra automática).

group
Selecione um grupo de linhas adjacentes (contando quebra automática). A seleção para em uma linha em branco e não se estende para fora da página atual.

page
Selecione todas as linhas visíveis, ou seja, a página.

all
Selecione todas as linhas, ou seja, incluindo as linhas salvas.

regex
Selecione uma "palavra" conforme determinado pela expressão regular a seguir no valor do recurso.

none
Nenhuma ação de seleção está associada a este recurso. O Xterm interpreta isso como o fim da lista. Por exemplo, você pode usá-lo para desativar o clique triplo (e superior), definindo on3Clicks como "none".

Os valores padrão para on2Clickse on3Clickssão "word" e "line" , respectivamente. Não há valor padrão para on4Clicks ou on5Clicks, tornando-os inativos. Na inicialização, o xterm determina o número máximo de cliques pelos onXClicks valores dos recursos definidos.

Thomas Dickey
fonte
O que o manual não diz a você: Para algumas distribuições, o padrão não é o padrão documentado. Definir um recurso charClass vazio restaura o padrão documentado. O que você especificar para charClass substituirá apenas as entradas que você especificar; entradas não especificadas são restauradas para o padrão documentado. Pelo menos, é assim que parece funcionar para mim.
Jeff Learman
Eu correr em um post que sugerem os seguintes valores: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Parece melhor e mais fácil de entender do que aqueles na resposta aceita.
X-yuri
Pensando bem, por enquanto eu decidi tirar o melhor de ambas as abordagens (pelo menos do jeito que eu a entendo agora): 2 cliques para uma palavra, 3 cliques para uma PALAVRA (no vimsentido xterm*on3Clicks: regex [^ \n]+), 4 cliques para copiar comandos de shell (da palavra atual até o fim da linha, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 clique para linhas inteiras ( xterm*on5Clicks: regex [^\n]+).
X-yuri