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.
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.
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.
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]+).
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).cutNewLine
->cutNewline
. Talvez isso tenha sido introduzido em versões mais recentes.onNClicks: regex
parece pelo menos mais legível.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):fonte
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.vim
sentidoxterm*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]+
).