Як налаштувати поведінку подвійного клацання в терміналі X?


17

У різних системах Unix / Linux я спостерігав різну поведінку подвійних клацань у додатках X-терміналів (наприклад, xterm).

Іноді подвійним клацанням миші вибираємо все ліворуч та праворуч до наступного не алфавітного символу (наприклад, він вибирає слово під курсором).

Іноді все, доки не буде обрано наступний пробіл / eol (наприклад, вибрані повні шляхи під курсором).

Як я можу налаштувати поведінку подвійного клацання - скажімо - в xterm (оскільки вона доступна в більшості систем)?

В даний час я вважаю другий режим більш зручним для більшості випадків використання.

Відповіді:


20

Ви робите це з ресурсами X. У мене є файл, .Xresourcesщо містить такі ресурси, пов'язані з 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

У моєму .xinitrcфайлі я маю рядок, який зливається в цих ресурсах:

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

Ці рядки роблять xterm подвійним клацанням і потрійним клацанням робити те, що мені подобається:

Подвійне клацання вважає "словом" включення косої риски (/), крапки (.), Зірочки (*) та деяких інших символів, що не буквено-цифрові. Це ресурс "charClass". Мені довелося зробити кілька виснажливих обмінів із цим charClass, щоб змусити його робити те, що я хочу. Здебільшого це дозволяє двічі клацнути по URL-адресах та повністю або частково кваліфікованих шляхах, щоб виділити їх.

Інші два рядки змушують тричі клацнути слово під мишею і переходити до кінця рядка, але не включати жодного нового рядка. Таким чином, ви можете потрійним клацанням на щойно виконаній команді, вставити її в інше вікно, і оскільки в ній немає нового рядка, ви можете відредагувати її, перш ніж запустити її в іншому вікні.

В Arch Wiki є стаття про ресурси X , включаючи розділ про ресурси xterm, але ці ресурси xterm не є повною.


1
Вікі-сервіс може бути корисним, але місце консультацій щодо ресурсів xterm - це його сторінка з посібником .
Томас Дікі

Або використовувати XTerm*VT100.charClass: 0-32:0,33-65535:1. Подвійне клацання потім вважатиме "словом" будь-яку послідовність символів, виключаючи пробіл (та контрольні символи).
Ньютонкс

Правило пробілів не корисне, якщо ви хочете отримати те, що знаходиться всередині лапок, наприклад, у json oneliner. Але я думаю, це залежить від використання. Наданий фрагмент у цій відповіді мені ідеально підходить.
Жан-Бернар Янсен

Ви помилилися: cutNewLine-> cutNewline. Можливо, це було введено в нових версіях.
x-yuri

1
І onNClicks: regexздається принаймні більш читабельним.
x-yuri

5

xterm має кілька параметрів ресурсів, пов'язаних із подвійним та потрійним клацанням для вибору (на сторінці керівництва перераховані всі відповідні ресурси):

cutNewline(клас CutNewline)
Якщо "false", потрійне клацання для вибору рядка не включає Newline в кінці рядка. Якщо "вірно", вибирається новий рядок . За замовчуванням - "true".

cutToBeginningOfLine(клас CutToBeginningOfLine)
Якщо "false", потрійне клацання, щоб вибрати рядок, вибирається лише з поточного слова вперед. Якщо "вірно", вибирається весь рядок. За замовчуванням - "true".

on2Clicks(клас On2Clicks)
on3Clicks(клас On3Clicks)
Вкажіть поведінку вибору у відповідь на кілька клацань миші. Один клацання миші завжди інтерпретується так, як описано в розділі Функції вибору (див. ВИКОРИСТАННЯ ПОІНТЕРА ). Кілька клацань миші (за допомогою кнопки, яка активує дію вибору-запуску) інтерпретуються відповідно до значень ресурсів on2Clicks тощо. Значення ресурсу може бути одним із таких:

word
Виберіть "слово", як визначено ресурсом charClass . Дивіться розділ ХАРАКТЕРИ .

line
Виберіть рядок (підрахунок обгортання).

group
Виберіть групу суміжних ліній (підрахунок обгортання). Вибір зупиняється на порожньому рядку і не поширюється за межі поточної сторінки.

page
Виберіть усі видимі рядки, тобто сторінку.

all
Виберіть усі рядки, тобто збережені рядки.

regex
Виберіть "слово" відповідно до регулярного виразу, яке випливає із значення ресурсу.

none
Жодна дія вибору не пов'язана з цим ресурсом. Xterm трактує це як кінець списку. Наприклад, ви можете використовувати його для відключення потрійного (і вище) клацання, встановивши on3Clicks на "none".

Значеннями за замовчуванням для on2Clicksі on3Clicksє "слово" та "рядок" відповідно. Немає значення за замовчуванням для on4Clicks або on5Clicksробить їх неактивними. Під час запуску xterm визначає максимальну кількість кліків за встановленими onXClicks значеннями ресурсу.


Що в цьому посібнику не сказано: для деяких дистрибутивів за замовчуванням це не документально підтверджений документ. Встановлення порожнього ресурсу charClass відновлює задокументовану документацію. Що б ви не вказали для charClass, перезаписуєте лише вказані вами записи; неуточнені записи відновляються до задокументованого за замовчуванням. Принаймні, так, як видається, це працює на мене.
Джефф Ліверман

Я зіткнувся з посади , які передбачають такі значення: xterm*on2Clicks: regex [^/@ \n]+, xterm*on3Clicks: regex [^ \n]+, xterm*on4Clicks: regex [^#$]+, xterm*on5Clicks: line. Здається, краще і легше зрозуміти, ніж ті, що у прийнятій відповіді.
x-yuri

По-друге, я вирішив отримати найкращий з обох підходів (принаймні так, як я це зараз розумію): 2 кліки за слово, 3 кліки за слово (у vimсенсі, xterm*on3Clicks: regex [^ \n]+), 4 кліки для копіювання команди з оболонки (від поточного слова до кінця рядка, xterm*on4Clicks: line, xterm*cutNewline: false, xterm*cutToBeginningOfLine: false), 5 натисніть для цілих рядків ( xterm*on5Clicks: regex [^\n]+).
x-yuri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.