Jak skonfigurować zachowanie podwójnego kliknięcia w terminalu X?

16

W różnych systemach Unix / Linux zaobserwowałem różne zachowanie podwójnego kliknięcia w aplikacjach terminalowych X (np. Xterm).

Czasami podwójne kliknięcie zaznacza wszystko w lewo i w prawo, aż do następnego niealfabetycznego znaku (np. Wybiera słowo pod kursorem).

Czasami wszystko jest zaznaczane do następnego pustego / eol (np. Wybierane są pełne ścieżki pod kursorem).

Jak skonfigurować zachowanie podwójnego kliknięcia - powiedzmy - w xterm (ponieważ jest dostępny w większości systemów)?

Obecnie uważam, że drugi tryb jest wygodniejszy w większości przypadków użycia.

maxschlepzig
źródło

Odpowiedzi:

19

Robisz to za pomocą zasobów X. Mam plik, .Xresourcesktóry zawiera te zasoby związane z 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

W moim .xinitrcpliku mam linię łączącą się w tych zasobach:

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

Te linie powodują, że xterm podwójnie kliknie i potrójne kliknięcie zrobi to, co lubię:

Dwukrotne kliknięcie uważa „słowo”, które obejmuje ukośnik (/), kropkę (.), Gwiazdkę (*) i niektóre inne znaki niealfanumeryczne. To zasób „charClass”. Musiałem zrobić trochę żmudnego majstrowania przy tym charClass, aby zrobić to, co chcę. Pozwala to głównie na dwukrotne kliknięcie adresów URL i ścieżek w pełni lub częściowo zakwalifikowanych, aby je podświetlić.

Pozostałe dwie linie powodują, że potrójne kliknięcie rozpoczyna się od słowa pod myszą i przechodzi do końca linii, ale nie zawiera żadnej nowej linii. W ten sposób możesz trzykrotnie kliknąć właśnie wykonane polecenie, wkleić je w innym oknie, a ponieważ nie ma on nowej linii, możesz je edytować przed uruchomieniem w innym oknie.

Arch Wiki zawiera artykuł o zasobach X , w tym sekcję o zasobach xterm, ale te zasoby xterm nie są kompletne.

Bruce Ediger
źródło
1
Wiki mogą być przydatne, ale miejscem, w którym można skonsultować zasoby xterm, jest strona podręcznika .
Thomas Dickey
Lub użyj XTerm*VT100.charClass: 0-32:0,33-65535:1. Dwukrotne kliknięcie będzie wtedy traktować „słowo” jako dowolną sekwencję symboli oprócz białych znaków (i znaków kontrolnych).
Newtonx
Zasada białych znaków nie jest dobra, jeśli chcesz uzyskać to, co jest w cudzysłowie, na przykład w json oneliner. Ale myślę, że to zależy od twojego użytkowania. Fragment podany w tej odpowiedzi jest dla mnie idealny.
Jean-Bernard Jansen
Masz błąd: cutNewLine-> cutNewline. Może zostało to wprowadzone w nowszych wersjach.
x-yuri
1
I onNClicks: regexwydaje się co najmniej bardziej czytelny.
x-yuri
5

xterm ma kilka ustawień zasobów związanych z podwójnym i potrójnym klikaniem do wyboru (strona podręcznika zawiera listę wszystkich odpowiednich zasobów):

cutNewline(klasa CutNewline)
Jeśli „fałsz”, trzykrotne kliknięcie, aby wybrać linię, nie zawiera nowej linii na końcu linii. Jeśli „prawda”, wybrana jest nowa linia . Wartość domyślna to „prawda”.

cutToBeginningOfLine(klasa CutToBeginningOfLine)
Jeśli „fałsz”, trzykrotne kliknięcie, aby wybrać linię, wybiera tylko bieżące słowo do przodu. Jeśli „prawda”, cała linia jest zaznaczona. Wartość domyślna to „prawda”.

on2Clicks(klasa On2Clicks)
on3Clicks(klasa On3Clicks)
Określ zachowanie wyboru w odpowiedzi na wiele kliknięć myszą. Pojedyncze kliknięcie myszą jest zawsze interpretowane zgodnie z opisem w rozdziale Funkcje wyboru (patrz UŻYWANIE POINTERA ). Wielokrotne kliknięcia myszą (za pomocą przycisku aktywującego akcję wyboru-start) są interpretowane zgodnie z wartościami zasobów on2Clicks itp. Wartość zasobu może być jedną z tych:

word
Wybierz „słowo” określone przez zasób charClass . Zobacz sekcję KLASY ZNAKÓW .

line
Wybierz linię (zawijanie zliczające).

group
Wybierz grupę sąsiednich linii (zawijanie zliczania). Zaznaczenie zatrzymuje się na pustej linii i nie wykracza poza bieżącą stronę.

page
Wybierz wszystkie widoczne linie, tj. Stronę.

all
Wybierz wszystkie linie, tj. Łącznie z zapisanymi liniami.

regex
Wybierz „słowo” zgodnie z wyrażeniem regularnym występującym w wartości zasobu.

none
Z tym zasobem nie jest powiązana żadna czynność wyboru. Xterm interpretuje to jako koniec listy. Możesz na przykład użyć go do wyłączenia potrójnego (i wyższego) kliknięcia poprzez ustawienie on3Clicks na „none”.

Wartościami domyślnymi dla on2Clicksi on3Clickssą odpowiednio „słowo” i „linia” . Nie ma wartości domyślnej dla on4Clicks lub on5Clicks, czyniąc je nieaktywnymi. Podczas uruchamiania xterm określa maksymalną liczbę kliknięć na podstawie ustawionych onXClicks wartości zasobów.

Thomas Dickey
źródło
Czego nie mówi ci instrukcja: W niektórych dystrybucjach domyślną wartością nie jest udokumentowana domyślna. Ustawienie pustego zasobu charClass przywraca udokumentowane ustawienie domyślne. Cokolwiek określisz dla charClass, zastąpi tylko wpisy, które określisz; nieokreślone wpisy są przywracane do udokumentowanych ustawień domyślnych. Przynajmniej tak mi się wydaje.
Jeff Learman
Zabrakło mi na stanowisku , które wskazują na następujące wartości: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Wydaje się lepszy i łatwiejszy do zrozumienia niż te w zaakceptowanej odpowiedzi.
x-yuri
Z drugiej strony, na razie zdecydowałem się na najlepsze z obu podejść (przynajmniej tak, jak je teraz rozumiem): 2 kliknięcia na słowo, 3 kliknięcia na WORD (w vimsensie xterm*on3Clicks: regex [^ \n]+), 4 kliknięcia na skopiowanie polecenia z muszli (od bieżącego słowa do końca linii, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 kliknięcie na całych liniach ( xterm*on5Clicks: regex [^\n]+).
x-yuri