far2l icon indicating copy to clipboard operation
far2l copied to clipboard

Some cosmetic improvements

Open froloffw7 opened this issue 4 years ago • 45 comments

Предложения:

  1. При работе в сессии xterm и им подобным определять состояние нажатых модификаторов аналогично как это делается в mc через вызов XQueryPointer. Особенно актуально при работе через ssh.
  2. Переустанавливать перменную окружения HISTFILE, например: /tmp//.far_history, чтобы не забивать историю shell командами Far, бесполезными для последующего повтора в sh.
  3. В Far WX GUI восстановить WX диалоги запроса пароля root и подтверждения.

Возможные реализации этих предложении в приложенных файлах в архиве.

usefull.tar.gz

froloffw7 avatar Oct 20 '21 14:10 froloffw7

  1. пересекается с #1101 и я все еще не понимаю этой идеи скрещивать ужа с ежом - типа быть консольной аппликухой, но дергать иксовые функции тут и там. Почему просто не быть честно иксовой апликухой? Ну и проблема с XQueryPointer в том что она иксовая, а иксов ведь может не быть (например, wayland). Хотя можно конечно сказать - ну нету так нету, но это приводит к так сказать фрагментации user experience.
  2. Можно, но покажите сценарий когда воспроизводится проблема. Сейчас far2l при посылке своей команды в шелл начинает ее с пробела - специально чтобы она в хистори не добавлялась. Хотя это при желании можно сломать - https://unix.stackexchange.com/questions/115917/why-is-bash-not-storing-commands-that-start-with-spaces
  3. Но почему?

elfmz avatar Oct 20 '21 15:10 elfmz

  1. Весьма актуально для удалённой работы через ssh. X-овая сессия тормозит, а в терминальной без модификаторв весьма неудобно. Если не будет X11, значит определяем (пытаемся определить) состояние через ioctl(). Wayland способ тоже можно прикрутить.

  2. Вот, к примеру, что у меня сыплется в историю:

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/

  1. Чисто эсттические предпочтения. WX диалоги выглядят поприятнее.

froloffw7 avatar Oct 20 '21 15:10 froloffw7

  1. Я может чтото не понимаю, но если у вас удаленное подключение по ssh открытом в обычном иксовом терминале и вы запустите far2l на той стороне, но исковые функции тому far2l не будут доступны, потому что иксы - тут , а far2l - там. Впрочем решение проблемы есть - можно тут запустить wx-овый far2l, потом в NetRocks создать sftp или scp подключение туда, зайти в то подключение и запустить в командной строке (которая в случае активного подключения NetRocks/sftp исполняет по SSH команды там ) far2l - то будет сюрприз)
  2. А что выводит echo $HISTCONTROL ?
  3. Точно не скажу, но вроде в то время когда диалоги были гуишными, были баги на то чтобы сделать их текстовыми) - оно так консистнее както. Хотя в принципе можно сделать настройку опционально возвращающую гуишный sudo диалог, просто даже не думал что так комуто будет нравится больше.

elfmz avatar Oct 20 '21 15:10 elfmz

  1. Как я понимаю, в этом случае Far2 запускается на удалённой стороне, а функция XQueryPointer определяет состояние модификаторов на рабочем месте.
  2. Переменная окружения HISTCONTROL у меня не определена, система Ubuntu 20.04 LTS.
  3. В коде, что я приложил, эти диалоги дёргаются из far2_gui.so. Если Far2 запускается из терминала, то соответственно отображаются текстовые.

froloffw7 avatar Oct 20 '21 16:10 froloffw7

Дополнение к 1. Я безусловно в курсе про возможность удалённого исполнения команд в Far2 через NetRocks. Но, эмулятор терминала в Far2 в текущей версии неполный. Например, редактировать файл в Vim скорее всего толком не получится. В общем этого и не требуется, поэтому и нет смысла тратить время на доведение его до уровня xterm или st.

froloffw7 avatar Oct 20 '21 16:10 froloffw7

1

  • Дело тут не только в возможности удаленного исполнения, но еще в том что эмулятор терминала far2l имеет расширения терминала, позволяющие запущенному внутри far2l работать как гуишному.
  • XQueryPointer максимум сможет определить положение модификаторов лишь на той стороне, где она сама исполняется. То есть на той стороне где работает SSH сервер, а не там где надо, или я все еще чегото не допонимаю.
  • Если чтото в vim не работает - пишите баги) Эмулятор далеко не идеальный конечно, но проблемы у него больше в области поддержки символов двойной ширины и режимов с виртуальной шириной терминала большей чем физическое окно, и это все ортогонально vim-у.
  1. Ага, понятно, то есть такое все таки бывает.

elfmz avatar Oct 20 '21 16:10 elfmz

  • Круто, что ещё могу сказать.
  • С этим кодом у меня при работе через ssh состояние модификаторов определяется, с точностью до Shift, Alt и Control. Левые и правые не различаются. Как оно внутри происходит, точно сказать не могу. Раньше было очень некомфортно работать, особенно из-за того, что для <Enter> и <BS> терминал всегда передаёт одинаковые keycodes независимо от состояния модификаторов. Набираешь командную строку, по привычке жмёшь <Control-Enter>, чтобы вставить имя файла, а оно запускается на исполнение.
  • Вы уверены, что Вам это нужно?
  1. Увы

froloffw7 avatar Oct 20 '21 16:10 froloffw7

1 . . Посмотрю подробнее. В целом, про улучшение качества жизни в терминале, самым правильным решением мне видится #641 - в принципе тоже расширения протокола ESC-последовательностей, просто более общепринятое, но правда и менее функциональное/гибкое. Ну хоть чтото. . Баги про чтото неработающее в вим? Нужны конечно.

2 А можете проверить - сделайте export HISTCONTROL=ignorespace или ignoreboth (в моей убунте 18.04 именно ignoreboth), потом запустите far2l с такой переменной установленной, и проверьте что он не будет гадить в хистори? Если поможет - то я просто добавлю приведение HISTCONTROL к адекватному состоянию при запуске far2l.

elfmz avatar Oct 20 '21 17:10 elfmz

  1. Относительно Vim.
  • Я не смотрел код, поэтому уточню, как реализовано у Вас переключение экранных буферов? Vim переключается в режим Alternate. В нём размер буфера равняется размеру экрана и скроллинг запрещён. В xterm/st команды скролинга передаются vim. В терминале Far2l экран скролится мышкой, хотя сам Far2l при запуске в терминале в этот режим переключается.
  • запустите vim, дальше :sp или :vsp и попробуйте переключиться мышкой в другую часть экрана.
  • Выделение сразу копируется в буфер обмена и сбрасывается. Это скорее особенность Far2l. В обычном Far не так. Но из-за этого функция выделения мышью --VISUAL-- в vim не работает.
  • Какие-то проблемы с подсветкой синтаксиса. У меня отображается только серый, белый и зелёный цвета. Возможно у меня специфические настройки .vimrc.
  1. В первом приближении, export HISTCONTROL=ignorespace убирает проблему с загаживанием истории.

froloffw7 avatar Oct 20 '21 17:10 froloffw7

Alternate реализован, а вот до мышки руки все еще не дошли :) Мышка в терминале работает только на adhoc-copy, событий приложениям при этом никаких не посылается - все обрабатывается на уровне терминала. В принципе надо бы сделать.

elfmz avatar Oct 20 '21 18:10 elfmz

Дополнение. Для проверки подключился к Ubuntu Desktop через ssh и в нем ещё один ssh на Ubuntu Server console only, На серверной Ubuntu DM не установлен. В Far2l с вызовом XQueryPointer() <Control-Enter> работает и в такой конфигурации.

froloffw7 avatar Oct 20 '21 18:10 froloffw7

Магия. Ну я попробую, попозже. Может там есть какието ESC последовательности, и XQueryPointer их шлет, видя что работает без иксов. Чтоб уточнить, что я правильно понимаю, как происходит проверка - юзер запускает gnome terminal, в нем - ssh на какой то другой сервер, запускает там far2l собранный с твиком на основе XQueryPointer, и тот за счет этого твика начинает различать Enter от Ctrl+Enter, нажатые в изначальном гном терминале?

elfmz avatar Oct 20 '21 18:10 elfmz

Установленного Gnome нет под рукой, пробовал xterm, mate-terminal и st. ssh запускается с ключом -X из терминала. И далее far2l --ee=1 PS чтобы заработал colorer потребовалось подкинуть libxerces-c-3.2.so. PPS С твиком Far2l корректно работает даже в linux-putty терминале. vim нет - putty не отрабатывает модификаторы.

froloffw7 avatar Oct 20 '21 19:10 froloffw7

АААА, то есть запускаете с X11 форвардингом и XQueryPointer юзает его. Хмм, может в этом и есть чтото..

elfmz avatar Oct 20 '21 20:10 elfmz

Насчет putty - есть твикнутая версия, которая умеет в far2l extensions про которые я в самом начале писал - https://github.com/unxed/putty4far2l

elfmz avatar Oct 20 '21 20:10 elfmz

с #641 есть проблемка: ни гном, ни кде не хотят его целиком поддерживать из соображений безопасности (как они её понимают). типа записать в клипборд — пожалуйста, а вот читать оттуда — ни-ни

unxed avatar Oct 20 '21 23:10 unxed

аргумент про фрагментацию user expirience мне кажется вполне легитимным. к примеру, если к существующим средствам работы с clipboard добавить ещё и xclip и osc 52, на вопрос "почему не работает буфер обмена" пользователь получает миллион вариантов ответа:

  • а вы как far2l запускали? локально или удалённо? а из какого терминала? а ssh с форвардингом иксов или нет? а иксклип установлен? а на удалённой машинке?

такое положение вещей, конечно, дичь)

при этом на все вопросы можно отвечать "юзайте wxовый, в нём всё просто работает из коробки". ну типа как firefox и всякие там palemoon: каждый может форкнуть, но торговая марка за mozilla foundation, и все знают, куда ходить за идеальным user expirience'ом

а кому нужны специфические конфигурации или кто фанат конкретной терминалки, те уж разберутся. то есть всякими такими твиками типа поддержки xclip или XQueryPointer мы собираем "длинный хвост" "не мейнстримных" пользователей, которых в мире линукса, надо полагать, полно

unxed avatar Oct 20 '21 23:10 unxed

То есть, wx'овая версия — это basic, default, и она «на гарантии». Хотите гонять в терминале без экстеншнов — на здоровье, такая возможность есть, но никакие претензии не принимаются, саппорт не предоставляется: чудо что там вообще что-то работает, и мы вас предупреждали! Можно хотя бы даже плашку такую показывать при запуске в терминале без экстеншнов: мол, тут работает не всё, рекомендованный способ запуска — через wx, делается это так-то.

Совсем идеальный вариант: стать настолько популярными, чтоб ВСЕ терминалы добавили поддержку экстеншнов :)

unxed avatar Oct 21 '21 00:10 unxed

Так много кто делает, к слову. Скажем, hashcat рассчитан на проприетарные OpenCL драйвера. Он работает и на Mesa, но поддержка не предоставляется.

unxed avatar Oct 21 '21 00:10 unxed

ни гном, ни кде не хотят его целиком поддерживать из соображений безопасности (как они её понимают). типа записать в клипборд — пожалуйста, а вот читать оттуда — ни-ни

Соображения валидные, far2l из таких же соображений позволяет читать клипборд только если в течении ближайших 5 сек юзер нажимал Ctrl+C или щелкал правой кнопкой мышки. То есть если клипборд будет пытаться прочитать какой нить скрипт по своей инициативе - получит шиш.

elfmz avatar Oct 21 '21 09:10 elfmz

X11 форвардинг кстати может быть неплохой альтернативой этим сторонним расширениям. Есть подозрение, что помимо опроса состояния модификаторов - еще и клипборд можно пробрасывать таким способом. Вот только keyup/keydown в реальном времени получать не получится.

elfmz avatar Oct 21 '21 11:10 elfmz

Чтобы получать нажатия в реальном времени нужно запускать обработчик events

        XNextEvent( dpy, &e );

и обрабатывать нажатия и отпускания

      switch (e.type) {
           case ButtonPress:
           case ButtonRelease:

froloffw7 avatar Oct 21 '21 11:10 froloffw7

По поводу установки цветов в режиме терминала. Чтобы не заморачиваться с RGB, можно просто менять цвета в палитре. Например. В этом примере цвета меняются для всех запущенных терминалов. Для Far2l достаточно будет сгенерированные OSC записать в stdout.

Цвета в терминале по умолчанию Цвета в терминале по умолчанию

Цвета помягче с изменённой палитрой по образцу палитры WX Цвета помягче с изменённой палитрой по образцу палитры 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'

и результат

Screenshot3

froloffw7 avatar Oct 21 '21 11:10 froloffw7

Но ведь нажатия будут приходить в терминальное окошко, не получится их перехватывать не перехватывая фокус ввода, а это чревато новыми забавными спецэффектами и костылями

elfmz avatar Oct 21 '21 11:10 elfmz

Как я понимаю, если окно не активно (no Focus), то события клавиш ему не присылаются

froloffw7 avatar Oct 21 '21 11:10 froloffw7

X11 форвардинг кстати может быть неплохой альтернативой этим сторонним расширениям

Ну расширения только не надо выпиливать, пожалуйста :) Расширения очень даже ок! :) На винде вот нет никаких иксов, которые можно было бы форвардить, а патченная путти чудесным образом работает через расширения.

unxed avatar Oct 21 '21 15:10 unxed

far2l из таких же соображений позволяет читать клипборд только если в течении ближайших 5 сек юзер нажимал Ctrl+C или щелкал правой кнопкой мышки

Написал об этом в тикетах гнома и кде по OSC 52, может, так же сделают

unxed avatar Oct 21 '21 15:10 unxed

При работе в сессии xterm и им подобным определять состояние нажатых модификаторов аналогично как это делается в mc через вызов XQueryPointer. Особенно актуально при работе через ssh.

А вот это готово у нас же, да?

И, кстати, про это же у нас #1126 есть.

unxed avatar Dec 12 '21 14:12 unxed

Готово да. От оригинального бага осталось только GUI диалоги пароля, но чета я в раздумьях и реальной пользы такой фичи и если ее таки делать - как ее включать? Не хочется замусоривать настройки, оставить как опцию конфигура сборки?

elfmz avatar Dec 12 '21 15:12 elfmz

Кстати, у меня на десктопе по Alt таки не появляются подсказки в tty версии.

unxed avatar Dec 12 '21 15:12 unxed