Page 1 of 4

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

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




В скрипте используется мой модуль "Расширение GetMsg" Уже не используется.
EditorFindAllList.lua.1_4_1.7z
(3.86 KiB) Downloaded 11 times
Версия 1.5.1 - обещанная фильтрация по вхождению в блок (CtrlH)
EditorFindAllList.lua.1_5_1.7z
С фильтрацией. Увы, в списке айденного пропадает раскраска .
(4.39 KiB) Downloaded 14 times

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

Posted: Sat 28 Dec, 2019 04:35
by Xerox
я считаю что потрясно. спасибо!

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

Posted: Sat 28 Dec, 2019 09:59
by John Doe
buniak_a_h wrote:
Sat 28 Dec, 2019 01:42
почему-то не реализованная в стандартном поиске
Ctrl-Enter?

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

Posted: Sat 28 Dec, 2019 10:40
by buniak_a_h
John Doe wrote:
Sat 28 Dec, 2019 09:59
buniak_a_h wrote:
Sat 28 Dec, 2019 01:42
почему-то не реализованная в стандартном поиске
Ctrl-Enter?
1. Хелп:
Ctrl+Enter, Ctrl+Щелчок левой кнопки мыши
Перейти к позиции найденного текста.
Воде как просто Enter - тоже перейти к позиции найденного текста. Хоть бы написали, что "не закрывая результатов"
2. Т.к. не выделено цветом, то я не заметил этого даже после Вашего сообщения (искомое встретилось на первом де экране несколько раз).
3. И вообще - у LF Search это красиво, а Ctrl+Enter - это как-то …

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

Posted: Sat 28 Dec, 2019 10:55
by buniak_a_h
John Doe, вдогонку.
Ситуация: поискал, хочу посмотреть контекст, если найду нужное - перейти, если нет - остаться на месте. Я понимаю, что можно поставить закладку, далее посмотреть по Ctrl+Enter … Удобно?
Не, мой скрипт удобнее делает.

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

Posted: Sat 28 Dec, 2019 11:01
by John Doe
buniak_a_h wrote:
Sat 28 Dec, 2019 10:55
Не, мой скрипт удобнее делает.
Однако теперь вы можете его сильно упростить.

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

Posted: Sat 28 Dec, 2019 11:18
by buniak_a_h
John Doe wrote:
Sat 28 Dec, 2019 11:01
Однако теперь вы можете его сильно упростить.
Может, я чего-то не понимаю … Уж куда проще? Первый вариант, который делал только синхронизацию без подсветки (и без всякого оформления) занимал вообще строк 30-40. Остальное - раскраска и сопутствующие (запоминание строки и т.п.). Я не знаю, как это сократить. Покажете?

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

Posted: Sat 28 Dec, 2019 16:19
by John Doe
Event на DN_LISTCHANGE, посылающий Ctrl-Enter.
Строк 10?

А, ещё возврат к запомненной позиции, если ничего не было выбрано.
20?

Но без подстветки.

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

Posted: Sat 28 Dec, 2019 16:42
by buniak_a_h
John Doe wrote:
Sat 28 Dec, 2019 16:19
Event на DN_LISTCHANGE, посылающий Ctrl-Enter.
Во, спасибо. У меня Event на DN_INPUT и проверка, сменилась ли позиция. Упрощу.
Посылка Ctrl+Enter - у меня чтение строки (4 строки) и editor.SetPosition . Для раскраски чтение всё равно нужно. Так на так.
А за DN_LISTCHANGE - отдельное спасибо. Можно будет несколько строчек сократить.

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

Posted: Sat 28 Dec, 2019 18:15
by buniak_a_h
John Doe, то ли я что-то не то делаю, то ли DN_LISTCHANGE не приходит в Event. Или надо как-то зарегистрировать? А жаль - вот это как раз могло помочь здорово сократить текст … :-(

upd
В описании подписки (far.SubscribeDialogDrawEvents) DN_LISTCHANGE не указан. Так что подписка тут ни при чём. На баг очень похоже… Не глянете? Может, действительно, баг?

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

Posted: Sat 28 Dec, 2019 18:46
by Xerox
подсветка это очень хорошо,
а про переход по КтрлЕнтер я тоже не знал ой как много лет..

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

Posted: Sat 28 Dec, 2019 18:54
by buniak_a_h
Xerox wrote:
Sat 28 Dec, 2019 18:46
подсветка это очень хорошо,
На самом деле в версии 1.2.1 имеется ошибочка: при поиске по регулярным выражениям учитывается регистр независимо от флага Case Sensitive. У себя я исправил, но тут появилась критика, хочу разобраться прежде чем выкладывать 1.2.2. Очень обидно, что в Event не приходит DN_LISTCHANGE !!! :mad:

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

Posted: Sat 28 Dec, 2019 19:52
by Xerox
buniak_a_h,
я попытался понять, и думаю что JD это, немного обознамшись..
У нас список найденного "всего" - это MENU а не LIST

Это все-таки ЛИСТ, но видимо то что он находится в MENU, не производит оное событие
У меня например это событие ловится в других местах, там где диалоги, а где меню - там не ловится
Тогда наверное нужен DN_MENUCHANGE тогда уж, (а не DN_LISTCHANGE),
- но такого кажется что нет в природе
Можно обрабатывать DN_INPUT/DN_CONTROLINPUT, и брать из Menu.Value значение
Или вы так и делаете?

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

Posted: Sat 28 Dec, 2019 20:07
by buniak_a_h
Xerox wrote:
Sat 28 Dec, 2019 19:52
Можно обрабатывать DN_INPUT, и брать из Menu.Value значение (?)
Или вы так и делаете?
Почти. Обрабатываю действительно DN_INPUT, а затем в первом итеме диалога (который на самом деле DI_LISTBOX) ищу в 6-м элементе (который на самом деле List) элемент с установленным флагом LIF_SELECTED. Т.е. хоть это и МЕНЮ, но и диалог с LISTBOX-ом тоже. Но Вы правы, надо попробовать вместо поиска среди элементов LISTBOX-а текущего получать всё, что надо, из MENU.

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

Posted: Sat 28 Dec, 2019 20:24
by buniak_a_h
Xerox, к сожалению не нашёл, как определить номер пункта Menu. Value выдаёт только текст пункта. Казалось бы, для полноты функционала логично было бы предусмотреть выдачу не только текста, но и номера. Увы… А номер я использую чтоб определить, было ли смещение по списку.