Come configurare il comportamento del doppio clic in un terminale X?


16

In diversi sistemi Unix / Linux ho osservato diversi comportamenti a doppio clic nelle applicazioni del terminale X (ad es. Xterm).

A volte un doppio clic seleziona tutto a sinistra e a destra fino al successivo carattere non alfabetico (ad es. Seleziona la parola sotto il cursore).

A volte tutto fino alla selezione del vuoto / eol successivo (ad esempio, vengono selezionati i percorsi completi sotto il cursore).

Come posso configurare il comportamento del doppio clic - diciamo - in xterm (perché è disponibile sulla maggior parte dei sistemi)?

Attualmente, trovo la seconda modalità più conveniente per la maggior parte dei casi d'uso.

Risposte:


19

Lo fai con X risorse. Ho un file .Xresourcesche contiene queste risorse relative a 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

Nel mio .xinitrcfile, ho alcune righe che si uniscono in quelle risorse:

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

Queste linee fanno fare doppio clic su xterm e fare clic triplo su quello che mi piace:

Il doppio clic considera una "parola" per includere barra (/), punto (.), Asterisco (*) e alcuni altri caratteri non alfanumerici. Questa è la risorsa "charClass". Ho dovuto fare un po 'di noioso giocherellare con quella CharClass per farlo fare quello che voglio. Ciò consente principalmente di fare doppio clic su URL e percorsi completamente o parzialmente qualificati per evidenziarli.

Le altre due righe fanno iniziare il triplo clic dalla parola sotto il mouse e vanno alla fine della riga, ma non includono alcuna nuova riga. In questo modo, puoi fare triplo clic su un comando che hai appena eseguito, incollarlo in un'altra finestra e, poiché non ha una nuova riga, puoi modificarlo prima di eseguirlo nell'altra finestra.

Arch Wiki ha un articolo sulle risorse X , inclusa una sezione sulle risorse xterm, ma quelle risorse xterm non sono complete.


1
I wiki possono essere utili, ma il luogo da consultare per le risorse xterm è la sua pagina di manuale .
Thomas Dickey,

Oppure usa XTerm*VT100.charClass: 0-32:0,33-65535:1. Un doppio clic considererà quindi una "parola" qualsiasi sequenza di simboli esclusi gli spazi bianchi (e i caratteri di controllo).
Newtonx,

La regola degli spazi bianchi non è utile se si desidera ottenere ciò che è racchiuso tra virgolette, ad esempio in un json oneliner. Ma immagino che dipenda dall'uso che hai. Lo snippet fornito in questa risposta è perfetto per me.
Jean-Bernard Jansen,

Hai un errore: cutNewLine-> cutNewline. Forse è stato introdotto nelle versioni più recenti.
x-yuri,

1
E onNClicks: regexsembra almeno più leggibile.
x-yuri,

5

xterm ha diverse impostazioni delle risorse relative al doppio e triplo clic per la selezione (la pagina del manuale elenca tutte le risorse rilevanti):

cutNewline(classe CutNewline)
Se "falso", il triplo clic per selezionare una riga non include la nuova riga alla fine della riga. Se "vero", la nuova riga è selezionata. L'impostazione predefinita è "true".

cutToBeginningOfLine(classe CutToBeginningOfLine)
Se "falso", fare triplo clic per selezionare una riga seleziona solo dalla parola corrente in avanti. Se "vero", l'intera riga è selezionata. L'impostazione predefinita è "true".

on2Clicks(classe On2Clicks)
on3Clicks(classe On3Clicks)
Specifica il comportamento di selezione in risposta a più clic del mouse. Un singolo clic del mouse viene sempre interpretato come descritto nella sezione Funzioni di selezione (vedere UTILIZZO DEL PUNTATORE ). I clic multipli del mouse (utilizzando il pulsante che attiva l'azione di selezione-avvio) vengono interpretati in base ai valori delle risorse di on2Clicks, ecc. Il valore della risorsa può essere uno di questi:

word
Seleziona una "parola" come determinato dalla risorsa charClass . Vedi la sezione CLASSI DI CARATTERI .

line
Seleziona una linea (conteggio a capo).

group
Seleziona un gruppo di linee adiacenti (conteggio a capo). La selezione si interrompe su una riga vuota e non si estende al di fuori della pagina corrente.

page
Seleziona tutte le linee visibili, ovvero la pagina.

all
Seleziona tutte le linee, ad esempio quelle incluse.

regex
Seleziona una "parola" come determinato dall'espressione regolare che segue nel valore della risorsa.

none
Nessuna azione di selezione è associata a questa risorsa. Xterm lo interpreta come la fine dell'elenco. Ad esempio, è possibile utilizzarlo per disabilitare il triplo (e superiore) clic impostando on3Clicks su "none".

I valori predefiniti per on2Clickse on3Clickssono "word" e "line" , rispettivamente. Non esiste un valore predefinito per on4Clicks o on5Clicks, rendendolo inattivo. All'avvio, xterm determina il numero massimo di clic in base ai onXClicks valori delle risorse impostati.


Cosa non ti dice il manuale: per alcune distribuzioni, il valore predefinito non è il valore predefinito documentato. L'impostazione di una risorsa charClass vuota ripristina l'impostazione predefinita documentata. Qualunque cosa tu specifichi per charClass, sovrascrive solo le voci specificate; le voci non specificate vengono ripristinate ai valori predefiniti documentati. Almeno, è così che sembra funzionare per me.
Jeff Learman,

Ho eseguito in un post che suggeriscono i seguenti valori: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Sembra migliore e più facile da capire rispetto a quelli nella risposta accettata.
x-yuri,

Ripensandoci, per ora ho deciso di ottenere il meglio da entrambi gli approcci (almeno per come lo capisco ora): 2 clic per una parola, 3 clic per una WORD (nel vimsenso xterm*on3Clicks: regex [^ \n]+), 4 clic per la copia comandi da shell (da parola corrente alla fine della linea, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 clicca per linee intere ( xterm*on5Clicks: regex [^\n]+).
x-yuri,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.