far2l
far2l copied to clipboard
Some cosmetic improvements
Предложения:
- При работе в сессии xterm и им подобным определять состояние нажатых модификаторов аналогично как это делается в mc через вызов XQueryPointer. Особенно актуально при работе через ssh.
- Переустанавливать перменную окружения HISTFILE, например: /tmp/
/.far_history, чтобы не забивать историю shell командами Far, бесполезными для последующего повтора в sh. - В Far WX GUI восстановить WX диалоги запроса пароля root и подтверждения.
Возможные реализации этих предложении в приложенных файлах в архиве.
- пересекается с #1101 и я все еще не понимаю этой идеи скрещивать ужа с ежом - типа быть консольной аппликухой, но дергать иксовые функции тут и там. Почему просто не быть честно иксовой апликухой? Ну и проблема с XQueryPointer в том что она иксовая, а иксов ведь может не быть (например, wayland). Хотя можно конечно сказать - ну нету так нету, но это приводит к так сказать фрагментации user experience.
- Можно, но покажите сценарий когда воспроизводится проблема. Сейчас far2l при посылке своей команды в шелл начинает ее с пробела - специально чтобы она в хистори не добавлялась. Хотя это при желании можно сломать - https://unix.stackexchange.com/questions/115917/why-is-bash-not-storing-commands-that-start-with-spaces
- Но почему?
-
Весьма актуально для удалённой работы через ssh. X-овая сессия тормозит, а в терминальной без модификаторв весьма неудобно. Если не будет X11, значит определяем (пытаемся определить) состояние через ioctl(). Wayland способ тоже можно прикрутить.
-
Вот, к примеру, что у меня сыплется в историю:
vim boxdraw.c
exit
. /tmp/far2l_3e8_0/vtcmd/26f7_1;echo -ne $'\x1b'"_far2l_8D03r2W7s:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_2;echo -ne $'\x1b'"_far2l_5lnPP74OkC4N9U:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_3;echo -ne $'\x1b'"_far2l_JTS3Zf4f9R:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_4;echo -ne $'\x1b'"_far2l_wq4E6Z5Kl87P5:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_5;echo -ne $'\x1b'"_far2l_g96KYdC183:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_6;echo -ne $'\x1b'"_far2l_U9Y1ZGgpt6Ls5:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_7;echo -ne $'\x1b'"_far2l_HDmx9Yl780WGl1Uw:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_8;echo -ne $'\x1b'"_far2l_73oVuo1YLeMO:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_9;echo -ne $'\x1b'"_far2l_R2X6uFk1O78o:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_10;echo -ne $'\x1b'"_far2l_8X4UGH22BJJ:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_11;echo -ne $'\x1b'"_far2l_3j6B0F9S13I:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_12;echo -ne $'\x1b'"_far2l_8NpKtd3obQW157j:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_13;echo -ne $'\x1b'"_far2l_9EB00ZZ14z4:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_14;echo -ne $'\x1b'"_far2l_2J5xtuN8s5u:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_15;echo -ne $'\x1b'"_far2l_cijDs5YE6f4fOEm7:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_16;echo -ne $'\x1b'"_far2l_HRuY3r9SeYA:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_17;echo -ne $'\x1b'"_far2l_4DR3r2dN:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_18;echo -ne $'\x1b'"_far2l_UfpCGwXu0FCqNB0:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_19;echo -ne $'\x1b'"_far2l_7AqrJOx5W:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_20;echo -ne $'\x1b'"_far2l_N712mO27VGW3:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_21;echo -ne $'\x1b'"_far2l_s6HLe5T866w44E9f:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_22;echo -ne $'\x1b'"_far2l_3qjaO0X0i4Ckl:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_23;echo -ne $'\x1b'"_far2l_7mlb7KH4NmoDy4:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_24;echo -ne $'\x1b'"_far2l_sY2003h914Uz:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_25;echo -ne $'\x1b'"_far2l_95nc2co01dm:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_26;echo -ne $'\x1b'"_far2l_q46guiSM74W75:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_27;echo -ne $'\x1b'"_far2l_sW8nv3y2:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_28;echo -ne $'\x1b'"_far2l_Z3T2rscy:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_29;echo -ne $'\x1b'"_far2l_3W6ffKck5H719l7:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_30;echo -ne $'\x1b'"_far2l_mbOmGqKZ0T3xs46:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_31;echo -ne $'\x1b'"_far2l_566QlZhZoN0KP:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/26f7_32;echo -ne $'\x1b'"_far2l_xt6uNJJTt80:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/5b8a_1;echo -ne $'\x1b'"_far2l_8D03r2W7s:$FARVTRESULT"$'\x07'
EXIT
exit
. /tmp/far2l_3e8_0/vtcmd/5baa_1;echo -ne $'\x1b'"_far2l_8D03r2W7s:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/5baa_2;echo -ne $'\x1b'"_far2l_5lnPP74OkC4N9U:$FARVTRESULT"$'\x07'
. /tmp/far2l_3e8_0/vtcmd/5baa_3;echo -ne $'\x1b'"_far2l_JTS3Zf4f9R:$FARVTRESULT"$'\x07'
export
cd /tmp/st
vim boxdraw.c
cd work/
- Чисто эсттические предпочтения. WX диалоги выглядят поприятнее.
- Я может чтото не понимаю, но если у вас удаленное подключение по ssh открытом в обычном иксовом терминале и вы запустите far2l на той стороне, но исковые функции тому far2l не будут доступны, потому что иксы - тут , а far2l - там. Впрочем решение проблемы есть - можно тут запустить wx-овый far2l, потом в NetRocks создать sftp или scp подключение туда, зайти в то подключение и запустить в командной строке (которая в случае активного подключения NetRocks/sftp исполняет по SSH команды там ) far2l - то будет сюрприз)
- А что выводит echo $HISTCONTROL ?
- Точно не скажу, но вроде в то время когда диалоги были гуишными, были баги на то чтобы сделать их текстовыми) - оно так консистнее както. Хотя в принципе можно сделать настройку опционально возвращающую гуишный sudo диалог, просто даже не думал что так комуто будет нравится больше.
- Как я понимаю, в этом случае Far2 запускается на удалённой стороне, а функция XQueryPointer определяет состояние модификаторов на рабочем месте.
- Переменная окружения HISTCONTROL у меня не определена, система Ubuntu 20.04 LTS.
- В коде, что я приложил, эти диалоги дёргаются из far2_gui.so. Если Far2 запускается из терминала, то соответственно отображаются текстовые.
Дополнение к 1. Я безусловно в курсе про возможность удалённого исполнения команд в Far2 через NetRocks. Но, эмулятор терминала в Far2 в текущей версии неполный. Например, редактировать файл в Vim скорее всего толком не получится. В общем этого и не требуется, поэтому и нет смысла тратить время на доведение его до уровня xterm или st.
1
- Дело тут не только в возможности удаленного исполнения, но еще в том что эмулятор терминала far2l имеет расширения терминала, позволяющие запущенному внутри far2l работать как гуишному.
- XQueryPointer максимум сможет определить положение модификаторов лишь на той стороне, где она сама исполняется. То есть на той стороне где работает SSH сервер, а не там где надо, или я все еще чегото не допонимаю.
- Если чтото в vim не работает - пишите баги) Эмулятор далеко не идеальный конечно, но проблемы у него больше в области поддержки символов двойной ширины и режимов с виртуальной шириной терминала большей чем физическое окно, и это все ортогонально vim-у.
- Ага, понятно, то есть такое все таки бывает.
- Круто, что ещё могу сказать.
- С этим кодом у меня при работе через ssh состояние модификаторов определяется, с точностью до Shift, Alt и Control. Левые и правые не различаются. Как оно внутри происходит, точно сказать не могу. Раньше было очень некомфортно работать, особенно из-за того, что для <Enter> и <BS> терминал всегда передаёт одинаковые keycodes независимо от состояния модификаторов. Набираешь командную строку, по привычке жмёшь <Control-Enter>, чтобы вставить имя файла, а оно запускается на исполнение.
- Вы уверены, что Вам это нужно?
- Увы
1 . . Посмотрю подробнее. В целом, про улучшение качества жизни в терминале, самым правильным решением мне видится #641 - в принципе тоже расширения протокола ESC-последовательностей, просто более общепринятое, но правда и менее функциональное/гибкое. Ну хоть чтото. . Баги про чтото неработающее в вим? Нужны конечно.
2 А можете проверить - сделайте export HISTCONTROL=ignorespace или ignoreboth (в моей убунте 18.04 именно ignoreboth), потом запустите far2l с такой переменной установленной, и проверьте что он не будет гадить в хистори? Если поможет - то я просто добавлю приведение HISTCONTROL к адекватному состоянию при запуске far2l.
- Относительно Vim.
- Я не смотрел код, поэтому уточню, как реализовано у Вас переключение экранных буферов? Vim переключается в режим Alternate. В нём размер буфера равняется размеру экрана и скроллинг запрещён. В xterm/st команды скролинга передаются vim. В терминале Far2l экран скролится мышкой, хотя сам Far2l при запуске в терминале в этот режим переключается.
- запустите vim, дальше :sp или :vsp и попробуйте переключиться мышкой в другую часть экрана.
- Выделение сразу копируется в буфер обмена и сбрасывается. Это скорее особенность Far2l. В обычном Far не так. Но из-за этого функция выделения мышью --VISUAL-- в vim не работает.
- Какие-то проблемы с подсветкой синтаксиса. У меня отображается только серый, белый и зелёный цвета. Возможно у меня специфические настройки .vimrc.
- В первом приближении,
export HISTCONTROL=ignorespaceубирает проблему с загаживанием истории.
Alternate реализован, а вот до мышки руки все еще не дошли :) Мышка в терминале работает только на adhoc-copy, событий приложениям при этом никаких не посылается - все обрабатывается на уровне терминала. В принципе надо бы сделать.
Дополнение. Для проверки подключился к Ubuntu Desktop через ssh и в нем ещё один ssh на Ubuntu Server console only, На серверной Ubuntu DM не установлен. В Far2l с вызовом XQueryPointer() <Control-Enter> работает и в такой конфигурации.
Магия. Ну я попробую, попозже. Может там есть какието ESC последовательности, и XQueryPointer их шлет, видя что работает без иксов. Чтоб уточнить, что я правильно понимаю, как происходит проверка - юзер запускает gnome terminal, в нем - ssh на какой то другой сервер, запускает там far2l собранный с твиком на основе XQueryPointer, и тот за счет этого твика начинает различать Enter от Ctrl+Enter, нажатые в изначальном гном терминале?
Установленного Gnome нет под рукой, пробовал xterm, mate-terminal и st. ssh запускается с ключом -X из терминала. И далее far2l --ee=1 PS чтобы заработал colorer потребовалось подкинуть libxerces-c-3.2.so. PPS С твиком Far2l корректно работает даже в linux-putty терминале. vim нет - putty не отрабатывает модификаторы.
АААА, то есть запускаете с X11 форвардингом и XQueryPointer юзает его. Хмм, может в этом и есть чтото..
Насчет putty - есть твикнутая версия, которая умеет в far2l extensions про которые я в самом начале писал - https://github.com/unxed/putty4far2l
с #641 есть проблемка: ни гном, ни кде не хотят его целиком поддерживать из соображений безопасности (как они её понимают). типа записать в клипборд — пожалуйста, а вот читать оттуда — ни-ни
аргумент про фрагментацию user expirience мне кажется вполне легитимным. к примеру, если к существующим средствам работы с clipboard добавить ещё и xclip и osc 52, на вопрос "почему не работает буфер обмена" пользователь получает миллион вариантов ответа:
- а вы как far2l запускали? локально или удалённо? а из какого терминала? а ssh с форвардингом иксов или нет? а иксклип установлен? а на удалённой машинке?
такое положение вещей, конечно, дичь)
при этом на все вопросы можно отвечать "юзайте wxовый, в нём всё просто работает из коробки". ну типа как firefox и всякие там palemoon: каждый может форкнуть, но торговая марка за mozilla foundation, и все знают, куда ходить за идеальным user expirience'ом
а кому нужны специфические конфигурации или кто фанат конкретной терминалки, те уж разберутся. то есть всякими такими твиками типа поддержки xclip или XQueryPointer мы собираем "длинный хвост" "не мейнстримных" пользователей, которых в мире линукса, надо полагать, полно
То есть, wx'овая версия — это basic, default, и она «на гарантии». Хотите гонять в терминале без экстеншнов — на здоровье, такая возможность есть, но никакие претензии не принимаются, саппорт не предоставляется: чудо что там вообще что-то работает, и мы вас предупреждали! Можно хотя бы даже плашку такую показывать при запуске в терминале без экстеншнов: мол, тут работает не всё, рекомендованный способ запуска — через wx, делается это так-то.
Совсем идеальный вариант: стать настолько популярными, чтоб ВСЕ терминалы добавили поддержку экстеншнов :)
Так много кто делает, к слову. Скажем, hashcat рассчитан на проприетарные OpenCL драйвера. Он работает и на Mesa, но поддержка не предоставляется.
ни гном, ни кде не хотят его целиком поддерживать из соображений безопасности (как они её понимают). типа записать в клипборд — пожалуйста, а вот читать оттуда — ни-ни
Соображения валидные, far2l из таких же соображений позволяет читать клипборд только если в течении ближайших 5 сек юзер нажимал Ctrl+C или щелкал правой кнопкой мышки. То есть если клипборд будет пытаться прочитать какой нить скрипт по своей инициативе - получит шиш.
X11 форвардинг кстати может быть неплохой альтернативой этим сторонним расширениям. Есть подозрение, что помимо опроса состояния модификаторов - еще и клипборд можно пробрасывать таким способом. Вот только keyup/keydown в реальном времени получать не получится.
Чтобы получать нажатия в реальном времени нужно запускать обработчик events
XNextEvent( dpy, &e );
и обрабатывать нажатия и отпускания
switch (e.type) {
case ButtonPress:
case ButtonRelease:
По поводу установки цветов в режиме терминала. Чтобы не заморачиваться с RGB, можно просто менять цвета в палитре. Например. В этом примере цвета меняются для всех запущенных терминалов. Для Far2l достаточно будет сгенерированные OSC записать в stdout.
Цвета в терминале по умолчанию

Цвета помягче с изменённой палитрой по образцу палитры WX

Простенький скрипт вывода цветов палитры терминала (в Far2l не работает)
#!/bin/bash
for((i=0; i<16; i++)); do
printf "\e[48;5;${i}m%03d" $i;
printf '\e[0m';
done
printf '\n'
и результат

Но ведь нажатия будут приходить в терминальное окошко, не получится их перехватывать не перехватывая фокус ввода, а это чревато новыми забавными спецэффектами и костылями
Как я понимаю, если окно не активно (no Focus), то события клавиш ему не присылаются
X11 форвардинг кстати может быть неплохой альтернативой этим сторонним расширениям
Ну расширения только не надо выпиливать, пожалуйста :) Расширения очень даже ок! :) На винде вот нет никаких иксов, которые можно было бы форвардить, а патченная путти чудесным образом работает через расширения.
far2l из таких же соображений позволяет читать клипборд только если в течении ближайших 5 сек юзер нажимал Ctrl+C или щелкал правой кнопкой мышки
Написал об этом в тикетах гнома и кде по OSC 52, может, так же сделают
При работе в сессии xterm и им подобным определять состояние нажатых модификаторов аналогично как это делается в mc через вызов XQueryPointer. Особенно актуально при работе через ssh.
А вот это готово у нас же, да?
И, кстати, про это же у нас #1126 есть.
Готово да. От оригинального бага осталось только GUI диалоги пароля, но чета я в раздумьях и реальной пользы такой фичи и если ее таки делать - как ее включать? Не хочется замусоривать настройки, оставить как опцию конфигура сборки?
Кстати, у меня на десктопе по Alt таки не появляются подсказки в tty версии.