Ошибки при получении текста пункта МЕНЮ в результате "Искать все" Topic is solved

Здесь можно сообщить о найденных багах в Far.
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by Kadaner »

Latest post of the previous page:

buniak_a_h wrote: Tue 06 May, 2025 03:01 Я не нашёл способа запомнить предпочтительный вид.
Это не сделано. Можно добавить. Изменение было и так большое, я предпочёл не усложнять. Кроме того, новые настройки всегда вызывают вопросы (типа, а может не надо?). Давайте обсудим, что хочется. Не затруднит ли Вас создать запрос на новую фичу на GitHub'е?
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by Kadaner »

buniak_a_h wrote: Tue 06 May, 2025 03:01 У меня есть макрос, синхронизирующий положение в списке найденного и положение в редакторе.
А Ctrl+Enter не годится? Просто спрашиваю.
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by HaRT »

Kadaner wrote: Tue 06 May, 2025 03:05 Получим 2 мегабайта зря потраченной памяти. Это, конечно, крайний случай, но у меня такое бывает. Можно пережить, но как-то... неаккуратненько.
Ну, во-первых, по нынешним временам это совсем немного. Во-вторых, она же не совсем потрачена, а только на время, пока открыто меню результатов поиска. Но, в-третьих, внутреннее представление не слишком важно, если внешние контракты (UI, Macro API, Plugin API) соблюдены.
Kadaner wrote: Tue 06 May, 2025 03:05 Надо ли соблюсти все размеры с точностью до позиции, или можно "сжать" колонки, убрав по крайней мере несколько пробелов перед номером строки? Если мы точно знаем, что в файле всего 20 строк, зачем тратить 8 позиций на номер строки? И можно ли выравнять номера направо вместо того чтобы "склеивать" их вокруг двоеточия?
Как бы я стал писать скрипт, использующий эти данные… Я бы, наверно, разбирал по регэкспу или вроде того. Поэтому, на мой взгляд, все пробелы вокруг номеров строк/столбцов можно почикать, а вот сохранить стоит все специфичные разделители: вертикальная черта, двоеточие и т.п. Ну а те, кто закладывается на конкретную ширину полей тут, те сами себе злобные буратины.
Kadaner wrote: Tue 06 May, 2025 03:18 А Ctrl+Enter не годится? Просто спрашиваю.
Подозреваю, что имеется в виду автоматическая синхронизация при перемещении по списку результатов.
Last edited by HaRT on Tue 06 May, 2025 03:41, edited 1 time in total.
Reason: Добавлена ссылка
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4565
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by buniak_a_h »

Kadaner wrote: Tue 06 May, 2025 03:18 Ctrl+Enter не годится?
Ну, не очень. Надо либо подсветку найденного делать (мой макрос подсвечивает), либо крест включать. Поясню. На видимом экране много вхождений образца. Чтобы выбрать нужное требуется как-то отметить соответствующее вхождение.
Есть ещё одно соображение. Тогда надо запоминать исходное положение редактора, чтобы в случае отказа вернуться.
Эти соображения перечислены в теме, посвящённой макросу. Не мной - пользователями.Кстати, именно они написали мне в телеге, что скрипт перестал фурычить. Т.е., видимо, юзают.
HaRT wrote: Tue 06 May, 2025 03:32 Подозреваю, что имеется в виду автоматическая синхронизация при перемещении по списку результатов.
Ну и да, это - тоже удобно.
User avatar
buniak_a_h
Posts: 4565
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by buniak_a_h »

HaRT wrote: Tue 06 May, 2025 03:32 Как бы я стал писать скрипт, использующий эти данные… Я бы, наверно, разбирал по регэкспу или вроде того.
У меня и был разбор по регэкспу. Увы, теперь между номером позиции и цитатой найденного текста не оставлено никаких разделителей, поэтому если цитата начинается с цифры, то никакой разбор по регэкспу не поможет. Хотя бы один пробел вставил! Был бы возможен разбор по простенькому регэкспу ^%D*(%d+)%D+(%d+)%D.
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by Kadaner »

buniak_a_h wrote: Tue 06 May, 2025 07:05 Хотя бы один пробел вставил!
OK, верну всё взад. Звиняйте, дяденька, бес попутал. Сможете потерпеть несколько дней? Я не уверен, что успею до выходных, плюс надо время на ревью.

Я понял насчёт позиционирования. Может было бы полезнее сделать API, которое для данного пункта возвращает номер строки / колонки? Мне не надо симулировать неуклюжий формат, Вам не нужно парсить регекспом.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by zg »

Kadaner wrote: Wed 07 May, 2025 00:48Может было бы полезнее сделать API
несложно сделать возврат номера строки по far.SendDlgMessage(id,F.DM_USER,…,pos) и позиции в строке по far.SendDlgMessage(id,F.DM_USER+1,…,pos).
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by Kadaner »

buniak_a_h wrote: Tue 06 May, 2025 03:01 Я бы в настройке (в far:config) вообще выключил бы показ номеров: всё равно видно же.
https://github.com/FarGroup/FarManager/issues/949

Кстати, может быть Вы можете использовать макрос, что-то типа Keys("Enter Shift+F5")?

Я вообще-то не сторонник макросов, так что я с удовольствием приделаю опцию, если все одобрят.
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by Kadaner »

zg wrote: Wed 07 May, 2025 01:26 несложно сделать возврат номера строки по far.SendDlgMessage...
Спасибо, подумаю. Мне нужна будет помощь в имплементации Plugin API. Я только-только научился приделывать Lua API, и то не вполне.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by zg »

Kadaner wrote: Wed 07 May, 2025 01:42Спасибо, подумаю. Мне нужна будет помощь в имплементации Plugin API.
я могу добавить, если buniak_a_h такой вариант устроит.
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by HaRT »

zg wrote: Wed 07 May, 2025 01:26 несложно сделать возврат номера строки по far.SendDlgMessage(id,F.DM_USER,…,pos) и позиции в строке по far.SendDlgMessage(id,F.DM_USER+1,…,pos).
zg wrote: Wed 07 May, 2025 01:46я могу добавить
Предполагается делать буквально так? Или имеется в виду добавление новых именованных констант наподобие DM_EDIT_FIND_ALL_GET_LINE_NUM и DM_EDIT_FIND_ALL_GET_COL_NUM?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by zg »

HaRT wrote: Wed 07 May, 2025 01:53Предполагается делать буквально так? Или имеется в виду добавление новых именованных констант наподобие DM_EDIT_FIND_ALL_GET_LINE_NUM и DM_EDIT_FIND_ALL_GET_COL_NUM?
не вижу смысла добавлять что-то там именованное для очень частной ситуации, где через пару лет может всё поменяться.
User avatar
buniak_a_h
Posts: 4565
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by buniak_a_h »

zg wrote: Wed 07 May, 2025 01:46 если buniak_a_h такой вариант устроит.
Ой, я такой капризный!
На самом деле я уже и к нынешнему приспособился. А если серьёзно, то тут столько всяких фишек собираются приделать, чтобы облегчить написание макросов. А на самом деле нужно сделать синхронизацию изначально; не переход по Ctrl+Enter, а именно автоматическую. С возможностью возврата. Макросы - это всё же костыли.
Вот у LF Search такое есть!
User avatar
Kadaner
Posts: 70
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by Kadaner »

buniak_a_h, я собираюсь починить формат элемента МЕНЮ - списка найденных вхождений и сделать его похожим на старый. Попробовал Ваш макрос в процессе отладки. Что-то в этом есть, может быть стану его использовать.

Теперь по делу. В истории изменений макроса читаю
06.05.2025 v1.5.4
  1. Исправлен разбор элемента МЕНЮ - списка найденных вхождений. Для ФАРа версии позже 6473
    номер строки и номер позиции занимают фиксированные позиции (1-6 и 7-11 соответственно)
    в элементе списка
Это неправильно. Как я пытался объяснить в другом месте:
Kadaner wrote: Wed 07 May, 2025 00:29 Сейчас в строке пункта меню, на номер строки выделяется столько позиций, сколько может понадобиться, учитывая количество строк в файле. Например, если в файле 100 строк, будет выделено 3 позиции, если 500000, то 6.
Так что выражение Row,Col = v.Text:sub(1,5), v.Text:sub(7,11) не будет работать на коротких файлах. Я попробовал поискать слово "will" в Far.exe.example.ini — не работает.

Я собираюсь добавить разделители в текст элемента меню, почти так, как это было раньше. После этого, вот такой регексп

Code: Select all

"^%s*(%d+)%s*%D%s*(%d+)%D"
должен работать как до 6473, так и начиная с версии, где я это сделаю.
User avatar
buniak_a_h
Posts: 4565
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by buniak_a_h »

Kadaner wrote: Fri 09 May, 2025 02:31 вот такой регексп

Code: Select all

"^%s*(%d+)%s*%D%s*(%d+)%D"
должен работать
Тут %s в середине лишнее :-) можно просто %D:

Code: Select all

"^%s*(%d+)%D+(%d+)%D"
На самом деле достаточно разделить хотя бы пробелом. А то никак мне не разобрать…
Last edited by buniak_a_h on Fri 09 May, 2025 05:58, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4565
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

Ошибки при получении текста пункта МЕНЮ в результате "Искать все"

Post by buniak_a_h »

Kadaner, опять переделал тот скрипт. Теперь он работает на файлах любого размера при условии, что номер позиции найденного образца занимает меньше 6-ти символов. В этом случае всегда есть хотя бы один пробел между номером строки и номером позиции. И вот этот пробел и считается началом номера позиции. Так что стало универсальнее.
Post Reply

Return to “Глюки и баги”