¿Cómo configurar el comportamiento de doble clic en un terminal X?

16

Bajo diferentes sistemas Unix / Linux, he observado diferentes comportamientos de doble clic en aplicaciones de terminal X (por ejemplo, xterm).

A veces, un doble clic selecciona todo a izquierda y derecha hasta el siguiente carácter no alfabético (por ejemplo, selecciona la palabra debajo del cursor).

A veces, todo hasta que se selecciona el siguiente espacio en blanco / eol (por ejemplo, se seleccionan rutas completas debajo del cursor).

¿Cómo puedo configurar el comportamiento de doble clic, digamos, en xterm (porque está disponible en la mayoría de los sistemas)?

Actualmente, el segundo modo me parece más conveniente para la mayoría de los casos de uso.

maxschlepzig
fuente

Respuestas:

19

Lo haces con X recursos. Tengo un archivo .Xresourcesque contiene estos recursos relacionados con 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

En mi .xinitrcarchivo, tengo alguna línea que se fusiona en esos recursos:

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

Esas líneas hacen que xterm doble clic y triple clic hagan lo que me gusta:

Hacer doble clic considera una "palabra" para incluir la barra inclinada (/), el punto (.), El asterisco (*) y algunos otros caracteres no alfanuméricos. Ese es el recurso "charClass". Tuve que jugar un poco tedioso con ese charClass para que hiciera lo que quiero. Eso en su mayoría le permite hacer doble clic en las URL y en las rutas completas o parcialmente calificadas para resaltarlas.

Las otras dos líneas hacen que el triple clic comience desde la palabra debajo del mouse y vaya al final de la línea, pero no incluye ninguna nueva línea. De esa manera, puede hacer triple clic en un comando que acaba de ejecutar, pegarlo en otra ventana y, como no tiene una nueva línea, puede editarlo antes de ejecutarlo en la otra ventana.

Arch Wiki tiene un artículo sobre recursos X , que incluye una sección sobre recursos xterm, pero esos recursos xterm no están completos.

Bruce Ediger
fuente
1
Los wikis pueden ser útiles, pero el lugar para consultar los recursos de xterm es su página de manual .
Thomas Dickey
O utilice XTerm*VT100.charClass: 0-32:0,33-65535:1. Al hacer doble clic, se considerará que una "palabra" es cualquier secuencia de símbolos, excepto los espacios en blanco (y los caracteres de control).
Newtonx
La regla de espacios en blanco no es buena si desea obtener lo que está dentro de las comillas, en un json oneliner, por ejemplo. Pero supongo que depende del uso que tengas. El fragmento proporcionado en esta respuesta es perfecto para mí.
Jean-Bernard Jansen
Tienes un error: cutNewLine-> cutNewline. Tal vez eso se introdujo en versiones más nuevas.
x-yuri
1
Y onNClicks: regexparece al menos más legible.
x-yuri
5

xterm tiene varias configuraciones de recursos relacionadas con doble y triple clic para la selección (la página del manual enumera todos los recursos relevantes):

cutNewline(clase CutNewline)
Si es "falso", hacer clic tres veces para seleccionar una línea no incluye la nueva línea al final de la línea. Si es "verdadero", se selecciona la nueva línea . El defecto es cierto".

cutToBeginningOfLine(clase CutToBeginningOfLine)
Si es "falso", hacer triple clic para seleccionar una línea selecciona solo de la palabra actual hacia adelante. Si es "verdadero", se selecciona toda la línea. El defecto es cierto".

on2Clicks(clase On2Clicks)
on3Clicks(clase On3Clicks)
Especifique el comportamiento de selección en respuesta a múltiples clics del mouse. Un solo clic del mouse siempre se interpreta como se describe en la sección Funciones de selección (ver USO DEL PUNTERO ). Los clics múltiples del mouse (usando el botón que activa la acción de seleccionar-iniciar) se interpretan de acuerdo con los valores de los recursos de on2Clicks, etc. El valor del recurso puede ser uno de estos:

word
Seleccione una "palabra" según lo determine el recurso charClass . Ver la sección CLASES DE PERSONAJES .

line
Seleccione una línea (contando envoltura).

group
Seleccione un grupo de líneas adyacentes (contando el ajuste). La selección se detiene en una línea en blanco y no se extiende fuera de la página actual.

page
Seleccione todas las líneas visibles, es decir, la página.

all
Seleccione todas las líneas, es decir, incluidas las líneas guardadas.

regex
Seleccione una "palabra" según lo determinado por la expresión regular que sigue en el valor del recurso.

none
Ninguna acción de selección está asociada con este recurso. Xterm lo interpreta como el final de la lista. Por ejemplo, puede usarlo para deshabilitar el triple clic (y superior) configurando on3Clicks en "none".

Los valores predeterminados para on2Clicksy on3Clicksson "palabra" y "línea" , respectivamente. No hay un valor predeterminado para on4Clicks o on5Clicks, lo que los desactiva. En el inicio, xterm determina el número máximo de clics por los onXClicks valores de recursos que se establecen.

Thomas Dickey
fuente
Lo que el manual no le dice: para algunas distribuciones, el valor predeterminado no es el valor predeterminado documentado. Establecer un recurso charClass vacío restaura el valor predeterminado documentado. Lo que especifique para charClass sobrescribe solo las entradas que especifique; las entradas no especificadas se restauran al valor predeterminado documentado. Al menos, así es como parece funcionar para mí.
Jeff Learman
Me he encontrado un puesto que sugieren los siguientes valores: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Parece mejor y más fácil de entender que los de la respuesta aceptada.
x-yuri
Pensándolo bien, por ahora decidí obtener lo mejor de ambos enfoques (al menos tal como lo entiendo ahora): 2 clics para una palabra, 3 clics para una PALABRA (en vimel sentido xterm*on3Clicks: regex [^ \n]+), 4 clics para copiar comandos de shell (de palabra actual hasta el final de la línea, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 hacer clic para líneas completas ( xterm*on5Clicks: regex [^\n]+).
x-yuri