Синхронизация редактора с результатами поиска (Show All)

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

У плагина LuaFAR Search имеется удобная фишка, почему-то не реализованная в стандартном поиске: при показе ВСЕХ найденных строк при переходе по найденным строкам редактор позиционируется на соответствующей строке. Сделал я небольшой макрос, делающий аналогичную вещь.
Макрос состоит из четырёх обработчиков событий (два для стандартного диалога поиска и два для поиска по плагину RESearch). Первый Event читает параметры поиска, второй поддерживает переход по найденным строкам. Общая функция преобразовывает строку в координаты и реализует позиционирование и раскраску найденного.




В скрипте используется мой модуль "Расширение GetMsg" Уже не используется.
EditorFindAllList.lua.1_4_1.7z
(3.86 KiB) Downloaded 69 times
Версия 1.5.1 - обещанная фильтрация по вхождению в блок (CtrlH)
EditorFindAllList.lua.1_5_1.7z
С фильтрацией. Увы, в списке айденного пропадает раскраска .
(4.39 KiB) Downloaded 73 times
Last edited by buniak_a_h on Tue 31 Dec, 2019 06:25, edited 4 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Latest post of the previous page:

John Doe wrote: Mon 30 Dec, 2019 13:54 Только вот сказано, что исправление экспериментальное, а значит есть вероятность, что обнаружатся негативные последствия, из-за которых придётся вернуть всё как было.
Это правильно … Обнаружились сложности (неудобство) в использовании DN_LISTCHANGE вместо DN_INPUT.
Конкретно: после прихода DN_LISTCHANGE в Param.Param2 - правильное значение (новый индекс), а в Object.CurPos - предыдущий. Ну и, соответственно, Menu.Value - старое значение. Хотя Event = DE_DLGPROCEND (т.е., по идее, хендлер вызывается ПОСЛЕ стандартной обработки). Я понимаю, что обходится заменой Menu.Value на Menu.GetValue.
Ещё сложность с первым вхождением. Как оказалось, при DN_INITDIALOG Menu.GetValue(1) возвращает пустую строку. Т.е. МЕНЮ, видимо, ещё не проинициализировано. Так что пока (пока либо сам не придумаю, либо сообщество не подскажет) воздержусь от использования DN_LISTCHANGE …
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by John Doe »

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

Отмеченные вами несоответствия вероятно тоже поправимы, но это другой вопрос.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

John Doe wrote: Mon 30 Dec, 2019 21:28 использовать соответствующие функции из апи плагинов
«Это Вы сейчас с кем разговариваете?»©
Я не знаю не только, как из скрипта, написанного на LUA, использовать функции из АПИ плагинов, но и какие функции "соответствующие".
Я, честно говоря, думал, что все вызовы функций, кроме встроенных в ЛУА - это вызовы неких функций из LuaMacro.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Синхронизация редактора с результатами поиска (Show All)

Post by Xerox »

buniak_a_h,
эмм, я сильно не вникал, и если я правильно понял вопрос - "как получить текст из евента" (?)
если номер который приносит ДН_ЛИСТЧАНЖ он правильный, то можно брать из элемента диалога так:
GetDlgITem(ep.Param1)[6][ep.Param2].Text
где:
6 = где сидит таблица значений в элементе ЛИСТ
ep = параметры евента
ep.Param1 = номер элемента ЛИСТ
ep.Param2 = номер нового значения элемента ЛИСТ

отсюда собственно:
https://api.farmanager.com/ru/dialogapi ... hange.html
там еще что прикольно можно отменить этот переход на новое значение,
возможно поэтому значения МЕНЮ в обьектах не спешит становиться новым.
И мы тогда как бонус получаем прежнее значение МЕНЮ/позицию для сравнивания если надо,
без сохранения в переменных заранее, т.е. обходясь меньшим количеством переменных
ну если нет каких-нибудь засад с этим
Last edited by Xerox on Tue 31 Dec, 2019 01:04, edited 3 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Xerox wrote: Tue 31 Dec, 2019 00:56 если номер который приносит ДН_ЛИСТЧАНЖ он правильный, то можно брать из элемента диалога так:
GetDlgITem(ep.Param1)[6][ep.Param2].Text
1. Ну, собсно, именно так я и беру (ну, почти - я не знаю, что такое GetDlgITem, но получаю по hDlg:send(F.DM_GETDLGITEM, 1) ). Я ж писал, что обойти можно. Просто теряется кайф от DN_LISTCHANGE …
2. На самом деле для первоначального позиционирования на первый найденный образец позже текущей позиции редактора я сразу в DN_INITDIALOG запоминаю все строки (да ещё слегка преобразовываю для повышения эффективности дальнейшей обработки). Поэтому эта проблема отсохла сама собой.
--
Сейчас выложу версию 1.4.1 с поддержкой результатов поиска плагином RESearch. Ещё тут родилась мысль, что, например, если в редакторе есть отмеченный блок, то по Ctrl+H можно скрывать результаты вне блока; таким образом можно будет "реализовать поиск внутри отмеченной области" (на самом деле, конечно, не реализовать, а симулировать). Хотелось бы знать, может ли это кому-нить кроме меня показаться удобным. Я до сих пор пользуюсь LF Search-ем и RESearch-ем только по той причине, что у стандартного F7 нет поиска в выделенной области. Я писал, но никто не делает …
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Версия 1.5.1 - сделана фильтрация по вхождению в блок. Увы, после обновления списка теряется раскраска найденных образцов в списке найденных. Ели кто знает, как с этим бороться - поможите кто чем может! Нашёл, но уже не сегодня…
Last edited by buniak_a_h on Tue 31 Dec, 2019 06:36, edited 1 time in total.
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Синхронизация редактора с результатами поиска (Show All)

Post by Xerox »

buniak_a_h wrote: Tue 31 Dec, 2019 04:10 Хотелось бы знать, может ли это кому-нить кроме меня показаться удобным
я думаю что было бы удобно
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Синхронизация редактора с результатами поиска (Show All)

Post by Xerox »

buniak_a_h wrote: Mon 30 Dec, 2019 13:53 Кстати! Пользуется кто-нить из читающих эту тему плагином RESearch? Там тоже есть Show All и нету синхронизации… Стоит доделывать и публиковать?
если не очень затратно, то стоит, я рассматриваю его и ЛФСеарч, до конца не определился, да и вопче, опятьже, если не оч. затратно, то давай, спасибо
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

Xerox wrote: Tue 31 Dec, 2019 10:44 если не оч. затратно, то давай, спасибо
Дык уже в первом сообщении ткмы. Версия 1.5.1 - и фильтрация, и RESearch
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Синхронизация редактора с результатами поиска (Show All)

Post by DV »

Может, это исключительно моё восприятие, но немного изменённое стандартное поведение мне нравится больше... Для иллюстрации, вот макрос для поиска всех вхождений, которым я пользуюсь сейчас:

Для меня огромное преимущество данного макроса в таком, казалось бы, маленьком нюансе, что при его вызове экран не дёргается. Потому что когда текущая строка вдруг прыгает вверх, это неожиданно, взгляд теряется и ищет, куда же делась строка...
Last edited by DV on Tue 31 Dec, 2019 12:47, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

DV wrote: Tue 31 Dec, 2019 12:46 огромное преимущество <…>, что при его вызове экран не дёргается.
Да я согласен. Неохота было проверять, находится ли уже найденная строка на экране. Ну и не перекрыта ли она таблицей. В этом случае, извините, дёргаться будет всё равно - не смещать же диалог, чтоб показать найденное! В частности поэтому я пока не публикую последний (мой) вариант, сохраняющий раскраску при фильтрации…
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Синхронизация редактора с результатами поиска (Show All)

Post by HaRT »

buniak_a_h wrote: Tue 31 Dec, 2019 12:57 не смещать же диалог, чтоб показать найденное
Конкретно этим диалогом не пользовался, но в целом я как пользователь предпочитаю именно смещение диалога — при условии, что возможно одновременно показать и найденное (по возможности целиком), и диалог (без его уменьшения).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Синхронизация редактора с результатами поиска (Show All)

Post by Xerox »

HaRT,
Если что, то мой скрипт позволяет сдвигать и изменять размер диалога,
на днях закину обновленную совсем-совсем безглючную версию
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Синхронизация редактора с результатами поиска (Show All)

Post by HaRT »

Xerox wrote: Tue 31 Dec, 2019 14:42 мой скрипт позволяет сдвигать и изменять размер диалога
Да мне довольно и своих (простеньких), которые прижимают диалог влево/ вверх/ вправо/ вниз или центруют — в зависимости от нажатого кнопкосочетания.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Синхронизация редактора с результатами поиска (Show All)

Post by buniak_a_h »

HaRT wrote: Tue 31 Dec, 2019 13:04 предпочитаю именно смещение диалога
Тут возникает неприятный момент. Представьте, что мышка вне диалога, шагаю с клавиатуры. В какой-то момент приходится этот диалог сместить, и указатель мышки оказывается над списком. Оба!!! Указатель в списке смещается так, чтобы соответствовать указателю мышки. Или это настраивается?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Синхронизация редактора с результатами поиска (Show All)

Post by HaRT »

buniak_a_h wrote: Tue 31 Dec, 2019 15:51 указатель мышки оказывается над списком. Оба!!! Указатель в списке смещается так, чтобы соответствовать указателю мышки. Или это настраивается?
Насколько я понимаю, «в вакууме» ничто никуда не смещается, но в реальных условиях достаточно небольшого дрожания стола, чтобы породить событие движения мыши и привести к выбору другого элемента. Меня это не только в Фаре раздражает и огорчает, но переходить на трэкбол или тачпад я пока не готов. :)
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Обсуждение макросов”