Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2 small ideas for the Сommand history window #1618

Open
atolismesh opened this issue Apr 17, 2023 · 48 comments
Open

2 small ideas for the Сommand history window #1618

atolismesh opened this issue Apr 17, 2023 · 48 comments

Comments

@atolismesh
Copy link
Contributor

2 идеи для окна вывода истории команд (Alt-F8) и, возможно, окна истории каталогов (Alt-F12):

  1. Сделать скрываемую колонку в которую выводить дату и время выполнения команды
  2. Сделать скрываемую колонку в которую выводить каталог в которой эта команда запускалась.

Колонки отражать/скрывать по аналогии как в файловых панелях - Ctrl-0...3

@akruphi
Copy link
Contributor

akruphi commented Apr 17, 2023

@atolismesh В windows far3 в истории уже давно идёт разбивка по датам (см. скриншот).
изображение
Возможно такое поведение будет быстрее портировать. Да и привычнее пересаживаться между far'ами в windows и linux.

@atolismesh
Copy link
Contributor Author

atolismesh commented Apr 17, 2023

Возможно такое поведение будет быстрее портировать. Да и привычнее пересаживаться между far'ами в windows и linux.

Не всегда far для windows нужно брать для образца. :)
Под linux часто важно и время выполнения команды, чтобы сравнить со временем измененных файлов и записями в log-ах. Особенно если это рабочий инструмент.
Я бы сделал как я описал выше.

@elfmz
Copy link
Owner

elfmz commented Jun 4, 2023

1 Сделал пока можно считать в черновом виде, по Ctrl+T. Ньюансы:

  • колонка таймстампов первая, так как когда длина строки айтема шире самой менюшки то текущая реализация меню не позволяет сделать вторую колонку чтоб она была видна всегда, а не была задвинута гдето далеко справа.
  • механизм автохоткеев назначает горячие буквы по всей строке менюшки, то есть - использует и таймстампы. Не эстетично, по хорошему надо както расширять этот механизм для избирательности по колонкам.
  • таймстампы сделал в сокращенном виде: для команд исполненных сегодня выводится только время, для исполненных в текущем месяце - число + время и так далее. Вроде глаз режет не сильно, но зато визуально разделяет сегодняшние и прочие команды. И место экономится опять же...

@akruphi
Copy link
Contributor

akruphi commented Jun 5, 2023

Посмотрел - удобно. @elfmz можно ли текст в первой колонке с датой и разделителем | выводить другим цветом (например черным), чтобы визуально сразу различать дату и имя файла? Сейчас при пролистывании из-за одного цвета высматривание нужной записи в истории достаточно быстро утомляет.

@elfmz
Copy link
Owner

elfmz commented Jun 5, 2023

Еще идея появилась - писать даты в разделителях, как в фар3, но по Ctrl+T показывать колонку с временем. Как такой вариант?

@akruphi
Copy link
Contributor

akruphi commented Jun 5, 2023

Еще идея появилась - писать даты в разделителях, как в фар3, но по Ctrl+T показывать колонку с временем. Как такой вариант?

Я за. Но хотелось бы фичу с разделителями дат выключаемой (например по Ctrl+D, по умолчанию достойно быть ВКЛ). Иногда из этого окна часть команд надо скопом быстро экспортнуть - я делаю через Alt+Ins и затем вырезать строки с разделителями дат напрягает. Кстати, в far3 и фильтрация по Ctrl+Alt+F на такие разделители адекватно действует.

Также в far3 в истории команд по F3 показывается доп информация (в настоящий момент каталог выполнения команды) - эту фичу быстрее и полезнее перетащить чем мудрить с добавлением третьей колонки.

@elfmz
Copy link
Owner

elfmz commented Jun 5, 2023

можно чтоб Ctrl+T по циклу переключало - простой список, список с разделителями-датами, список с разделителями-датами и временем в префиксе.

@atolismesh
Copy link
Contributor Author

Посмотрел первый вариант.

Еще идея появилась - писать даты в разделителях, как в фар3, но по Ctrl+T показывать колонку с временем. Как такой вариант?

можно чтоб Ctrl+T по циклу переключало - простой список, список с разделителями-датами, список с разделителями-датами и временем в префиксе.

Я за !

@unxed
Copy link
Contributor

unxed commented Jun 5, 2023

Иногда из этого окна часть команд надо скопом быстро экспортнуть - я делаю через Alt+Ins

Кстати, а вот бы возможность часть команд из этого окна скопом быстро экспортнуть без Alt+Ins, а нормально как-то, без обрезки по правому краю.

@akruphi
Copy link
Contributor

akruphi commented Jun 5, 2023

можно чтоб Ctrl+T по циклу переключало - простой список, список с разделителями-датами, список с разделителями-датами и временем в префиксе.

Согласен. Но по умолчанию первым вариант как far3 - список с разделителями-датами, а затем уже по кругу:
-> список с разделителями-датами -> список с разделителями-датами и временем в префиксе -> простой список ->

Кстати, а вот бы возможность часть команд из этого окна скопом быстро экспортнуть без Alt+Ins, а нормально как-то, без обрезки по правому краю.

Если сюда ещё и выделение нескольких строк с Shift приделавать, то совсем уж комбайн получится. Пока наверное не надо. Давайте сначала посмотрим как зайдут циклическое переключение по Ctrl+T, текст в столбце дат черным цветом и доп.инфа по F3.

@akruphi
Copy link
Contributor

akruphi commented Jun 6, 2023

Посмотрел вариант из f7b3877 С разделителями дней получилось хорошо!
Небольшие замечания к текущей версии:

  • при нажатии Ctrl+T перебрасывает на последний элемент списка, было бы хорошо сохранять позицию выбранной записи;
  • пропали даты из первой колонки для предыдущих дней, что неудобно в случае, когда в один день было много команд превышающих высоту окна и совершенно не видно какой день. Предыдущий вариант в этом отношении функциональнее и рванность ширины колонки тут меньшее зло.
  • если есть возможность, то текст другим цветом (наверное черным?) как время в первой колонке (включая разделитель |), так и строки с разделителями дней

@elfmz
Copy link
Owner

elfmz commented Jun 6, 2023

Ну все же рваная раскладка с датами в первой колонке не красиво выглядит. Выделения цветом в менюшном классе пока не предусмотрено, но попробую сделать.

@elfmz
Copy link
Owner

elfmz commented Jun 8, 2023

Сделал выделение цветом, это позволило еще и несколько знакомест сэкономить. Просто черный не катит - нужен же цвет из темы. Взял первый вариант что в голову пришел - цвет выключенных пунктов меню.

@elfmz
Copy link
Owner

elfmz commented Jun 8, 2023

Что касается информативности даты, которой не видно когда много команд, есть идея текст последнего невидимого разделителя добавлять к заголовку меню, типа
═════════════════════ History ─ 2023-06-08 ═════════════════

@akruphi
Copy link
Contributor

akruphi commented Jun 9, 2023

Сделал выделение цветом, это позволило еще и несколько знакомест сэкономить. Просто черный не катит - нужен же цвет из темы. Взял первый вариант что в голову пришел - цвет выключенных пунктов меню.

Спасибо. Сейчас получилось слишком бледно. Если не заморачиваться с введением нового цвета в теме, то можно взять из текущих Color items: Horizontal menu -> Normal text

Просьба также этим же цветом попробовать отрисовывать на всю длину и строки с разделителями дней, которые --- дата ---

Замеченный баг: для самой древней (верхней) даты не показывается строка --- дата ---

Offtop: Позволю себя попросить Вас посоветовать путь решения в #1179 (comment) - уж очень хочется закрыть тот Issue, к тому же вроде бы элегантный путь наметился.

@akruphi
Copy link
Contributor

akruphi commented Jun 10, 2023

Раз уж тут идёт работа с историей допишу следующее неудобство:

При использовании истории (наткнулся в Alt+F12) и перехода на NetRocks-каталог ВСЕГДА появляется окно login/password. Даже, если уже открыто в этой же панели это же соединение! Причем безальтернативно, даже если в настройках NetRocks пароль сохранён или выбран альтернативный способ соединения (по ключу).

Соответственно перейти благополучно удаётся только в случае, если допустим вход по login/password и сам пароль помнишь - резко сужает юзабельность и удобство.

Если есть возможность, то было бы удобно следующее поведение:

  • если это соединение открыто на текущей или противоположной панели, то переходить сразу без диалогового окна
  • если соединение не открыто, то обязательно выдавать диалог, но с возможностью использовать запомненные параметры соединения из NetRocks

@akruphi
Copy link
Contributor

akruphi commented Jun 10, 2023

После последних изменений в окнах слетела центровка разделителей:

  • в Location слетела центровка разделителя Plugins (см. скриншот - сдвиг на один символ).
    изображение
  • в выборе кодировок также сдвижка на 1 символ
    изображение

В какой момент сломалось не обратил внимание. В версии far2l 12b9e9e (заведомо до введения и времени и цвета) разделители центрировались правильно.

@elfmz
Copy link
Owner

elfmz commented Jun 10, 2023

вроде поправил

@akruphi
Copy link
Contributor

akruphi commented Jun 10, 2023

вроде поправил

Ага. Сдвижка разделителей в диалогах Location, Code pages и т.п. вроде полностью поправлена.

Также частично поправлено пропадание самой верхней строки с датой. Изначально сразу после запуска far2l при первом открытии Alt+F8, Alt+F11 или Alt+F12 её нет, хотя ползунок справа не на самом вверху, но выше не прокручивает:
изображение
После Ctrl+T сверху разделитель с самой старой датой расталкивается, но не сразу - необходимо закрыть и снова открыть историю.

Обнаружилась ещё одна свежая особенность в меню в текущей версии по сравнению 12b9e9e все строки имеют отступ слева 1 символ (ранее были 2 символа), тогда как справа после комбинаций клавиш отступ остался 2 символа. И теперь галочки в меню Left и Right прижаты к тексту (ранее имели пробел).
Попробовал сам исправить, но не сообразил где.

Также углядел отсутствие отступа после текста заголовка . Это исправил и заслал в #1699

@elfmz
Copy link
Owner

elfmz commented Jun 10, 2023

Да отступ я уменьшил, этот отступ был нужен только для рисования треугольничка горизонтального скролла длинной строки по Alt+влев\вправо, мне показалось это черезчур расточительным, при скролле вправо вполне можно съедать самый левый символ.

@akruphi
Copy link
Contributor

akruphi commented Jun 10, 2023

Да отступ я уменьшил, этот отступ был нужен только для рисования треугольничка горизонтального скролла длинной строки по Alt+влев\вправо, мне показалось это черезчур расточительным, при скролле вправо вполне можно съедать самый левый символ.

Тогда ясно. Можно для симметрии ещё и справа уменьшить.

Ранее было симметрично:
изображение

Теперь же получаются несоразмерно бъющие в глаза отступы в меню слева и справа (после комбинаций клавиш):
изображение

@akruphi
Copy link
Contributor

akruphi commented Jun 11, 2023

@elfmz спасибо за исправление с разделителем самой древней (верхней) даты.
Ещё сопуствующая мелочь: сейчас, если перейти на самые древние даты, то в заголовке окна только History без даты. Или это так и задумано, чтобы дата засоряла заголовок только если прокрутились ниже чем на окно?

@elfmz
Copy link
Owner

elfmz commented Jun 11, 2023

Или это так и задумано, чтобы дата засоряла заголовок только если прокрутились ниже чем на окно?

ага

@akruphi
Copy link
Contributor

akruphi commented Jun 11, 2023

Предложения по юзабельности истории вызревшие при обсуждении нововведений в тг-чате:

  1. Из истории, например, по Tab переходить на активной панели к
    • из History command переходить к каталогу в котором была запущена команда
    • из File view history переходить к каталогу и подсвечивать файл который смотрелся/редактировался (в случае если Alt+F11 открыт из просмоторщика/редактора дискуссионно делать ли и, если делать, то перебрасывать ли сразу на панель или предупреждать как-то пользователя и просить согласие).

Именно в использовании для этого Tab нет полной уверенности, но вроде она здесь наиболее логична из свободных, хотя во избежании случайного нажатия может навесить на Ctrl+Tab.

  1. Сейчас история команд также засоряется результатами нажатия Enter на панели, что не всегда удобно.

В исходнике

EXCLUDECMDHISTORY_NOTPANEL = 0x00000004, // не помещать в историю команды выполнения с панели
присутствуют флаги

EXCLUDECMDHISTORY_NOTPANEL   = 0x00000004,		// не помещать в историю команды выполнения с панели
EXCLUDECMDHISTORY_NOTCMDLINE = 0x00000008,		// не помещать в историю команды выполнения с ком.строки

Однако вроде бы нигде это не вкл/выкл для пользователя в настройках - поправьте, если не нашел.

Было бы неплохо добавить управление ими в окно System settings (возможно в будущем вообще перенести все настройки Истории из перегруженного System settings в относительно свободный AutoComplete & History settings).

@akruphi
Copy link
Contributor

akruphi commented Jun 14, 2023

Спасибо за ff0f7e5 С командами набираемыми в командной строке всё замечательно! А для файлов, попадающих в историю после запуска с панелей по Enter, каталог не сохраняется и в строке Directory: пусто.

Для таких случаев, если не запомнен каталог может кнопки [ To dir ] и [ Run-up ] делать неактивными?

Также было бы неплохо поля Command и Directory сделать скроллируемыми read-only (на случай уж совсем длинных команд или каталогов).

С моей точки зрения данная фича приближается к идеалу, а какое мнение топикстартера @atolismesh ?

akruphi added a commit to akruphi/far2l that referenced this issue Jun 14, 2023
History improvement after elfmz#1618

* Add stub for F3 when have not directory data (not ideally, it need corrections)

* Add Ctrl-F10 to quick jump from history to dir/file in active panel

* Add all new elfmz#1618 features to Help
@atolismesh
Copy link
Contributor Author

Приветствую! Сделано шикарно! Уже пользуюсь.
Но мне категорично не хватает 3-й колонки, открываемой по дополнительному Ctrl-T, в Command history (Alt-F8):

2. Сделать скрываемую колонку в которую выводить каталог в которой эта команда запускалась.

@akruphi
Copy link
Contributor

akruphi commented Jun 15, 2023

Для меня по истории остались следующие пожелания (перечисляю в порядке убывания важности):

  • цвет колонки с временем сейчас очень блеклый - сделать, например, чёрный цвет символов
  • для файлов, попадающих в историю после запуска с панелей по Enter, каталог не сохраняется и в строке Directory пусто (fixed in 1) History commands by Alt-F8: fix save directory from panel by Enter & 2) Owner and Group Small Fix #1718)
  • в F3 поля Command и Directory сделать скроллируемыми read-only (на случай уж совсем длинных команд или каталогов)
  • настраиваемость пользователем EXCLUDECMDHISTORY_NOTPANEL и возможно также EXCLUDECMDHISTORY_NOTCMDLINE
  • проблема Alt-F12 в NetRocks-каталог всегда требует логин пароль вместо использования настроек соединения из NetRocks)
  • поменять хранение истории c .hst на a-la более unix формат, например как в логах
    YYYY-MM-DD hh:mm:ss command SEP dir
    
    тогда поиск и фильтрацию истории можно будет делать не только вручную внутри far2l по Ctrl+Alt+F но и unix-way через grep и т.п.

Сам я не настолько знаком с кодом far2l, чтобы что-то из этого в ближайшее время начать расковыривать самостоятельно.

@akruphi
Copy link
Contributor

akruphi commented Jun 16, 2023

В телеграм-чате привели вот такой скриншот с древностями с некорректной датой
image
который похоже связан с #1292

Вроде теперь уже не актуально, но добавить проверку корректности дат при выводе возможно имеет смысл.

@ivanshatsky
Copy link
Contributor

ivanshatsky commented Jun 16, 2023

@akruphi Без последнего пункта хотелок в принципе можно попробовать обойтись.
Прототип парсера истории команд (назовём его farhistory.sh):

#!/bin/bash

hst=$HOME/.config/far2l/history/commands.hst

readarray -t lines <<< $(grep '^Lines=' $hst | sed 's/Lines="//;s/"$//;s/\(\(^\|[^\\]\)\(\\\{2\}\)*\)\\n/\1\n/g')
readarray -t times <<< $(grep '^Times=' $hst | sed 's/Times=//;s/\s/\n/g')

for ((i=${#times[@]}-1; i>=0; i--)); do
    echo "${times[i]} ${lines[i]}"
done

Дело за малым, преобразовать timestamps во что-то human readable. Кто возьмётся? :)


Update.
Я и возьмусь :) Вот вроде уже более-менее пригодная к использованию версия (временные метки выводятся в UTC, но это можно подкрутить):

#!/bin/bash

hst=$HOME/.config/far2l/history/commands.hst

convert_filetime() {
    # Reverse the input string to process it in little-endian order
    reversed_hex=$(echo "$1" | sed 's/../&\n/g' | tr '[:lower:]' '[:upper:]' | tac | tr -d '\n')
    # Convert the reversed hexadecimal string to decimal
    decimal=$(echo "ibase=16; $reversed_hex" | bc)
    # Calculate the number of seconds since January 1, 1601 (in UTC)
    seconds=$((decimal / 10000000 - 11644473600))
    # Convert the seconds to human-readable date and time
    date=$(date -u -d @"$seconds" +"%Y-%m-%d %H:%M:%S")
    echo "$date"
}

readarray -t lines <<< $(grep '^Lines=' $hst | sed 's/Lines="//;s/"$//;s/\(\(^\|[^\\]\)\(\\\{2\}\)*\)\\n/\1\n/g' | sed 's/\\\\/\\/g')
readarray -t times <<< $(grep '^Times=' $hst | sed 's/Times=//;s/\s/\n/g')

for ((i=${#times[@]}-1; i>=0; i--)); do
    human_readable=$(convert_filetime "${times[i]}")
    echo "$human_readable ${lines[i]}"
done

Update 2. Поправил небольшую ошибку при обработке строк со слешами.

@ElderlyLinuxUser
Copy link

В телеграм-чате привели вот такой скриншот с древностями с некорректной датой image который похоже связан с #1292

Вроде теперь уже не актуально, но добавить проверку корректности дат при выводе возможно имеет смысл.

Это выдержка из моего commands.hst ( к скриншоту, который я запостил в telegram ).
Sorry, вчера уже не было возможности добавить.

Times=006b60743fa0d901 009bf3fe3ca0d901 8089b7a93ca0d901 808421842aa0d901 00b3f8de0da0d901 00ebbdbe5e9fd901 80afdf225d9fd901 004fecf65097d901 802c17b3f396d901 80b7eb35f396d901 80e7d822f396d901 00240f21f396d901 00f10be6f096d901 009a65cff096d901 80666394f096d901 0068418af096d901 001b54caef96d901 80a3c5c3ef96d901 80ef00bfef96d901 80e1d9b7ef96d901 00e8bbd4e296d901 8035658da996d901 80b124d2518cd901 00db2200eb8bd901 0040b7cf098bd901 00081bb3098bd901 808546d88282d901 00029bf18182d901 00d076ac8182d901 00686c875582d901 808ecc4e5582d901 80449b7a5482d901 00f3b9765182d901 802f0f7f4b82d901 801ab0d34d7cd901 80bb92fc387bd901 802659ff3d74d901 005a9c0a1e74d901 8006fd1a1774d901 80af56041774d901 00b134fa1674d901 00a6c9de1674d901 80c96dba1674d901 8061e4b01674d901 808cde591674d901 80b2e5be1574d901 804d18a11574d901 805c2b135a73d901 8019e8d08c72d901 8034e835e571d901 80116264dd71d901 8000eab6d271d901 800c6b5b865ad901 00778675e954d901 8032f3fabb54d901 8075fdeea754d901 802b5b9bee48d901 00e1fd95ee48d901 00665a41ee48d901 0097ccc1ed48d901 804b829fe448d901 00debdd2d648d901 8039fecad648d901 006b92964d48d901 80c04c904648d901 00859b254648d901 806e3f5b4448d901 0071a2e44348d901 807280da4348d901 009131724348d901 00dd6c6d4348d901 800011494348d901 00b6b3434348d901 806bd2662b48d901 00ec94302b48d901 00fd77232b48d901 00abdfec7447d901 80b0d1307347d901 00dfe0277347d901 00aabc2f4f3fd901 00340c1f4f3fd901 00a20d004f3fd901 80d72bcad43ed901 804271bfd43ed901 808085b3d43ed901 00eda89ed43ed901 801b74770a20d901 8094e0730a20d901 00b63fd00220d901 80416db50220d901 00d29a53451fd901 00c96f97d71dd901 8050163ab41dd901 00f56a3ad311d901 00400c513011d901 00ca5b403011d901 0062d2363011d901 80b536ce2e11d901 00c304732e11d901 80bee6b91611d901 801b6fd679f2d801 0031ecaa79f2d801 002f2ebf75f2d801 0082b46a97f1d801 80c282ee87cbd801 00bbc95d91cad801 80fb6a1bc699d801 00dc07bfc599d801 808171dc9699d801 0005a0e8ea98d801 80e24755c583d801 805c39e5c483d801 8051cec9c483d801 00756cb73c73d801 806c832f3673d801 806faa602b73d801 00320137b272d801 80ba7230b272d801 804f7976ad72d801 80706066ab72d801 80d72984a372d801 80fa66d69b72d801 80f998a73e64d801 80dd4a993e64d801 009aedba2964d801 803d48beb763d801 00552cd8a463d801 80198c509763d801 8096df699463d801 00fb97b15f63d801 00c8dc43a862d801 80a751729662d801 80e565669662d801 804284549662d801 80a69fad9562d801 002f11a79562d801 80a6ebe89062d801 806ed1f69f51d801 0045e8ec7851d801 8076b3cf7851d801 00e94e927851d801 802585907851d801 8055727d7851d801 8020924c7851d801 80aae13b7851d801 004436287851d801 00620a865f51d801 80b435c55951d801 8075cc2a4751d801 80a04eecdd50d801 0075fbe0dd50d801 0070fa75d650d801 807b0a2fd250d801 0049dc7eb850d801 801faaf58150d801 806be5f08150d801 80f534e08150d801 0066de5be04fd801 8048763af903d801 00fe1835f903d801 80387a362fa7d701 387a362fa7d70100 362fa7d701001bcc 2fa7d701001bccf1 a7d701001bccf149 d701001bccf14981 01001bccf14981d7 001bccf14981d701 1bccf14981d7011b ccf14981d7011bcc f14981d7011bccf1 4981d7011bccf149 81d7011bccf14981 d7011bccf14981d7 011bccf14981d701 1bccf14981d70100 ccf14981d70100cc f14981d70100ccf1 4981d70100ccf149 81d70100ccf14981 0100ccf14981d701 00ccf14981d70100 ccf14981d70100f0 f14981d70100f0f1 4981d70100f0f149 81d70100f0f14981 d70100f0f14981d7 0100f0f14981d701 00f0f14981d70100 f0f14981d70100f0 f14981d70100f0a4 4981d70100f0a449 81d70100f0a44981 d70100f0a44981d7 0100f0a44981d701 00f0a44981d70100 f0a44981d70100f0 a44981d70100f0a4 4981d70100f0a417 81d70100f0a41781 d70100f0a41781d7 0100f0a41781d701 00f0a41781d70100 f0a41781d70100f0 a41781d70100f0a4 1781d70100f0a417 81d70100f0a41749 d70100f0a41749d7 0100f0a41749d701 00f0a41749d70100 f0a41749d70100f0 a41749d70100f0a4 1749d70100f0a417 49d70100f0a41749 d70100f0a4174981 0100f0a417498101 00f0a41749810100 f0a41749810100f0 a41749810100f0a4 1749810100f0a417 49810100f0a41749 810100f0a4174981 0100f0a4174981d7 00f0a4174981d700 f0a4174981d700f0 174981d700f0a417 4981d700f0a41749 81d700f0a4174981 d700f0a4174981d7 00f0a4174981d701 f0a4174981d701f0 a4174981d701f0a4 174981d701f0a417 4981d701f0a41749 81d701f0a4174981 d701f0a4174981d7 01f0a4174981d701 f0a4174981d70180 a4174981d70180a4 174981d70180a417 4981d70180a41749 81d70180a4174981 d70180a4174981d7 0180a4174981d701 80a4174981d70180 a4174981d70180d4 174981d70180d417 4981d70180d41749 81d70180d4174981 d70180d4174981d7 0180d4174981d701 d4174981d70180d4 174981d70180d4a3 4981d70180d4a349 81d70180d4a34981 d70180d4a34981d7 0180d4a34981d701 80d4a34981d70180 d4a34981d70180d4 a34981d70180d4a3 4981d70180d4a34e 81d70180d4a34e81 d70180d4a34e81d7 0180d4a34e81d701 80d4a34e81d70180 d4a34e81d70180d4 a34e81d70180d4a3 4e81d70180d4a34e 81d70180d4a34e69 d70180d4a34e69d7 0180d4a34e69d701 80d4a34e69d70180 d4a34e69d70180d4 a34e69d70180d4a3 4e69d70180d4a34e 69d70180d4a34e69 d70180d4a34e6980 0180d4a34e698001 80d4a34e69800180 d4a34e69800180d4 a34e69800180d4a3 4e69800180d4a34e 69800180d4a34e69 800180d4a34e6980 0180d4a34e6980d7 80d4a34e6980d780 d4a34e6980d780d4 a34e6980d780d4a3 4e6980d780d4a34e 6980d780d4a34e69 80d780d4a34e6980 d780d4a34e6980d7 80d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d701d4 a34e6980d701d4a3 4e6980d701d4a34e 6980d701d4a34e69 80d701d4a34e6980 d701d4a34e6980d7 01d4a34e6980d701 d4a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 80d70180a34e6980 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d70180a3 4e6980d70180a34e 6980d70180a34e69 d70180a34e6980d7 0180a34e6980d701 80a34e6980d70180 a34e6980d7018063 4e6980d70180634e 6980d70180634e69 80d70180634e6980 d70180634e6980d7 0180634e6980d701 80634e6980d70180 634e6980d7018063 4e6980d70180634e 6980d70180634e69 80d70180634e6980 d70180634e6980d7 0180634e6980d701 80634e6980d70180 634e6980d7018063 4e6980d70180634e 6980d70180634e69 80d70180634e6980 d70180634e6980d7 0180634e6980d701 80634e6980d70180 634e6980d7018063

@ElderlyLinuxUser
Copy link

ElderlyLinuxUser commented Jun 17, 2023

@akruphi Без последнего пункта хотелок в принципе можно попробовать обойтись. Прототип парсера истории команд (назовём его farhistory.sh):

#!/bin/bash

hst=$HOME/.config/far2l/history/commands.hst

readarray -t lines <<< $(grep '^Lines=' $hst | sed 's/Lines="//;s/"$//;s/\(\(^\|[^\\]\)\(\\\{2\}\)*\)\\n/\1\n/g')
readarray -t times <<< $(grep '^Times=' $hst | sed 's/Times=//;s/\s/\n/g')

for ((i=${#times[@]}-1; i>=0; i--)); do
    echo "${times[i]} ${lines[i]}"
done

Дело за малым, преобразовать timestamps во что-то human readable. Кто возьмётся? :)

Update. Я и возьмусь :) Вот вроде уже более-менее пригодная к использованию версия (временные метки выводятся в UTC, но это можно подкрутить):

#!/bin/bash

hst=$HOME/.config/far2l/history/commands.hst

convert_filetime() {
    # Reverse the input string to process it in little-endian order
    reversed_hex=$(echo "$1" | sed 's/../&\n/g' | tr '[:lower:]' '[:upper:]' | tac | tr -d '\n')
    # Convert the reversed hexadecimal string to decimal
    decimal=$(echo "ibase=16; $reversed_hex" | bc)
    # Calculate the number of seconds since January 1, 1601 (in UTC)
    seconds=$((decimal / 10000000 - 11644473600))
    # Convert the seconds to human-readable date and time
    date=$(date -u -d @"$seconds" +"%Y-%m-%d %H:%M:%S")
    echo "$date"
}

readarray -t lines <<< $(grep '^Lines=' $hst | sed 's/Lines="//;s/"$//;s/\(\(^\|[^\\]\)\(\\\{2\}\)*\)\\n/\1\n/g' | sed 's/\\\\/\\/g')
readarray -t times <<< $(grep '^Times=' $hst | sed 's/Times=//;s/\s/\n/g')

for ((i=${#times[@]}-1; i>=0; i--)); do
    human_readable=$(convert_filetime "${times[i]}")
    echo "$human_readable ${lines[i]}"
done

Update 2. Поправил небольшую ошибку при обработке строк со слешами.

Проверил на своем commands.hst
Проблемные даты выводятся так же, как и на скриншоте (и остальные даты ранее первой корректной):
-10249-05-01 11:03:52
1602-08-24 05:13:22
2021-09-11 17:05:25

@ivanshatsky
Copy link
Contributor

@elfmz Новая фича просто прекрасна, но у неё есть очень серьёзный недостаток, которого лишён Far для Windows. Когда у нас включен фильтр (Ctrl-Alt-F), и в нём хоть что-то введено, разделители с датами пропадают. Вот если бы поправить ещё и это, было бы просто чудесно...

@akruphi
Copy link
Contributor

akruphi commented Jun 20, 2023

Когда у нас включен фильтр (Ctrl-Alt-F), и в нём хоть что-то введено, разделители с датами пропадают. Вот если бы поправить ещё и это, было бы просто чудесно...

Ну не пропадают, а фильтруются вместе с остальными строками:
image
Надеюсь @elfmz сможет такое поправить без серьёзных переписываний кода.

@ivanshatsky
Copy link
Contributor

Есть и ещё одно пожелание касательно работы окон истории совместно с включенным фильтром. В Far для Windows при вводе текста в фильтр подсветка перемещается на наиболее близкую из команд, удовлетворяющих фильтру, находящуюся выше подсвеченной, или же на наиболее близкую из находящихся ниже, если подходящих команд выше подсвеченной нет. В far2l мы всегда попадаем в саму верхнюю из команд, удовлетворяющих фильтру. Это как минимум менее привычно (а может и менее удобно).

@elfmz
Copy link
Owner

elfmz commented Jun 20, 2023

вроде разделители адекватно фильтруются теперь - показываются только те, после которых есть видимые айтемы

@ivanshatsky
Copy link
Contributor

@elfmz Разделители вроде заработали, но появился другой баг.
До последних изменений автофильтр работал таким образом. Когда мы начинаем вводить в него текст, итемы начинают фильтроваться. Если при вводе очередного символа мы получаем пустой список итемов, у нас получается пустое меню, в строке автофильтра видна строка вместе с последним введенным символом. Новых символов мы ввести уже не можем, пока не сотрём последний, который привёл к тому, что у нас пропали все совпадения. Это поведение совпадает с поведением Far для Windows.
Сейчас после ввода символа, в результате ввода которого список итемов должен стать пустым, список пустым не становится, введенный символ не отображается в поле автофильтра, но навигация работать перестаёт, пока мы не удалим этот "невидимый" символ клавишей BackSpace.

@elfmz
Copy link
Owner

elfmz commented Jul 2, 2023

можно закрывать?

@akruphi
Copy link
Contributor

akruphi commented Jul 2, 2023

можно закрывать?

Из насущных - смена блеклого цвета для столбца даты на более четко видимый (например взять из текущих Color groups: Horizontal -> Normal text ) и также все строки с разделителями дат --- дата --- также делать этим цветом.

Поработав с новой фичей я изменил своё мнение - после того как столбец время стал фиксированной ширины его стоит сделать включенным по умолчанию - очень полезен.

Остальные пожелания в #1618 (comment) наверное можно отложить или вынести в отдельные issue.

@elfmz
Copy link
Owner

elfmz commented Jul 2, 2023

По цветам, я думаю лучше оставить как есть, а в будущем когда появится поддержка RGB цветов в палитре самого фара просто сделать grayed/disabled или еще какой текст более читабельным по умолчанию и заюзать его.
Использование левого цвета чревато оказаться совершенно нечитаемым при какой нить нестадартной палитре (не все юзают дефолтовую палитру)

@ivanshatsky
Copy link
Contributor

ivanshatsky commented Jul 2, 2023

Подождите закрывать, пожалуйста. К цветам и всей остальной экзотике у меня претензий нет, а вот как насчёт пожелания в этом комментарии? Может всё-таки сделаем поведение аналогичным Far для Windows? В диалогах истории последнее совпадение как правило намного нужнее первого, разве не так?
Я немного поэкспериментировал с его (Far для Windows) поведением. В принципе в первом комментарии описал я его правильно, надо только учесть, что когда мы добавляем (или удаляем) символ к фильтру, и текущая отмеченная строка удовлетворяет новому фильтру, она же и остаётся выделенной.

Update
Если именно такое поведение реализовать слишком тяжело (ну или лень возиться), меня бы устроил даже упрощённый вариант: если в результате изменения фильтра выделенный элемент не отфильтровался, оставляем выделенным его же, если отфильтровался - делаем выделенным последний (но не первый).

@atolismesh
Copy link
Contributor Author

atolismesh commented Jul 3, 2023

Подождите закрывать - мне категорично не хватает 3-й колонки, открываемой по дополнительному Ctrl-T:

2. Сделать скрываемую колонку в которую выводить каталог в которой эта команда запускалась.

Все-таки мною тема называлась "2 небольшие идеи...", а, при всем уважении, реализована только одна, хоть и творчески дополненная.

@ivanshatsky
Copy link
Contributor

ivanshatsky commented Jul 4, 2023

Мои соображения по предыдущему комментарию.

Для отображения timestamp всё было немного проще - он фиксированной ширины и только кажется колонкой, на самом деле он, насколько я понимаю, в большей степени является составной частью строки меню. Примерно так же, и возможно даже тем же самым цветом, пока far2l не поддерживает RGB-палитру, можно включать и отключать отображение каталога в виде префикса перед самой командой. Я даже могу предложить для этого комбинацию клавиш Ctrl+P (от слова path).

Более того, честно говоря, циклическое переключение по Ctrl+T трёх настолько разных режимов отображения даты/времени мне тоже не очень нравится. Что бы я мог предложить в качестве альтернативы? Два варианта:

  • использовать дополнительно комбинацию Ctrl+Shift+T для переключения этих режимов в обратном порядке (из любого режима можно перейти в остальные два одной комбинацией клавиш);
  • использовать две разных комбинации: Ctrl+D (date) для включения/выключения разделителей по дате и Ctrl+T (time) для включения/выключения отображения временных меток.

Лично мне больше нравится второй, хотя реализовать, понятное дело, намного проще первый.

Если моё предложение будет принято и будет реализован вариант номер два, то в идеале наверное временные метки должны будут включать в себя дату, если разделение по датам выключено, и не включать её, если разделение по датам включено.

@akruphi
Copy link
Contributor

akruphi commented Jul 4, 2023

Всех приветствую!

Насколько я понимаю при текущей реализации VMenu (а кардинально ее улучшать только ради такого смысла нет) быстро колонки можно сделать только виртуальными - т.е. например выделять 9 символов под timestamp, а оставшеюся ширину делить между command (основной белый цвет) и directory (цвет такой же как у timestamp), перед выводом принудительно обрезая текст в обоих колонках.
На узких размерах окна - это будет ещё та боль, но на широких возможно и взлетит.
При этом наверное будет полезно навесить Ctrl+Left и Ctrl+Right для изменения взаимного размера этих колонок.
Насколько после этого будет подглючивать фильтрация по Ctrl+Alt+F я даже боюсь предположить 😺

Но при таком урезании ширины уже напрашиваются по F3 скроллируемые поля Command: и Directory: - где-то же надо иметь возможность полноценно увидеть что обрезалось.

@atolismesh можете ли чуть более конкретно сформулировать примерный usercase использования данных колонок - в смысле как поступать с слишком широкими строками? Будет ли Вам достаточно, если длинные команды и каталоги будут обрезаться по правому краю или наоборот надо по левому или оставлять символы слева/справа, а совать ... в центр?

Насчёт разделения на отдельные Ctrl-T, Ctrl-P и Ctrl-D поддерживаю.

Добавлять в первую "колонку" дату перед timestamp при выключенных Ctrl-D - ширину скушает изрядно, но тут уже такого в идеях наворотили, что возможно здраво.

@akruphi
Copy link
Contributor

akruphi commented Jul 4, 2023

Мне тут справедливо напинали, что я не учел в своих рассуждениях скроллинг по Alt-Left/Right. Поэтому поясню.

Проблема в том, что при переменной длине в текущем VMenu фиктивные колонки можно сделать визуально читаемыми, только принудительно обрезая/доращивая ширину начальных "колонок", чтобы каждая след. колонка начиналась под той же колонкой предыдущей строки

А в случае с каталогами в посл.колонке я не до конца понимаю usercase @atolismesh - нужно ли тут пролистывать по Alt-Left/Right или главное быстро визуально идентифицировать каталог, а полную инфу по F3 получить.

@atolismesh
Copy link
Contributor Author

Всех приветствую!
Мне достаточно, если длинные команды будут обрезаться по правому краю, а каталоги наоборот надо по левому.
В идее было быстро визуально идентифицировать каталог (хвост), а полную инфу по F3 получить.

Навесить по Ctrl-Left/Right изменение ширины между command & directory

Поддерживаю!

Если с колонкой 3 проблематично реализовать, то придумал еще альтернативный более легко реализуемый, как мне кажется, вариант: входишь в нужный каталог, вызываешь историю команд, жмешь горяую клавишу и в истории показываются только те команды, которые вводились в этом каталоге (в каталоге на активной панели файлов).

@akruphi
Copy link
Contributor

akruphi commented Jul 30, 2023

По цветам, я думаю лучше оставить как есть, а в будущем когда появится поддержка RGB цветов в палитре самого фара просто сделать grayed/disabled или еще какой текст более читабельным по умолчанию и заюзать его. Использование левого цвета чревато оказаться совершенно нечитаемым при какой нить нестадартной палитре (не все юзают дефолтовую палитру)

@elfmz теперь, когда True color внутри far добавлен вроде бы полностью, просьба вернуться к идее и подкрутить цвет столбца времени.

akruphi added a commit to akruphi/far2l that referenced this issue Aug 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants