Как настроить поведение двойного щелчка в X-терминале?

16

В разных системах Unix / Linux я наблюдал различное поведение двойного щелчка в приложениях X-терминала (например, xterm).

Иногда двойной щелчок выделяет все влево и вправо до следующего не алфавитного символа (например, он выбирает слово под курсором).

Иногда все до следующего пробела / eol выбрано (например, полные пути под курсором выбраны).

Как я могу настроить поведение двойного щелчка, скажем, в xterm (потому что оно доступно в большинстве систем)?

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

maxschlepzig
источник

Ответы:

19

Вы делаете это с 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)
Если «ложь», тройной щелчок для выбора строки не включает перевод строки в конце строки. Если «true», новая строка выбрана. По умолчанию установлено значение «true».

cutToBeginningOfLine(класс CutToBeginningOfLine)
Если «ложь», тройной щелчок для выбора строки выбирает только текущее слово вперед. Если «true», выделена вся строка. По умолчанию установлено значение «true».

on2Clicks(класс On2Clicks)
on3Clicks(класс On3Clicks)
Укажите поведение выбора в ответ на несколько щелчков мыши. Один щелчок мыши всегда интерпретируется, как описано в разделе « Функции выбора » (см. ИСПОЛЬЗОВАНИЕ ОЧИСТКИ ). Многократные щелчки мыши (с помощью кнопки, которая активирует действие select-start) интерпретируются в соответствии со значениями ресурса 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