Синхронизация редактора с результатами поиска (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
Xerox
Posts: 395
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

я считаю что потрясно. спасибо!
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 »

buniak_a_h wrote: Sat 28 Dec, 2019 01:42 почему-то не реализованная в стандартном поиске
Ctrl-Enter?
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: 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 - это как-то …
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, вдогонку.
Ситуация: поискал, хочу посмотреть контекст, если найду нужное - перейти, если нет - остаться на месте. Я понимаю, что можно поставить закладку, далее посмотреть по Ctrl+Enter … Удобно?
Не, мой скрипт удобнее делает.
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 »

buniak_a_h wrote: Sat 28 Dec, 2019 10:55 Не, мой скрипт удобнее делает.
Однако теперь вы можете его сильно упростить.
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: Sat 28 Dec, 2019 11:01 Однако теперь вы можете его сильно упростить.
Может, я чего-то не понимаю … Уж куда проще? Первый вариант, который делал только синхронизацию без подсветки (и без всякого оформления) занимал вообще строк 30-40. Остальное - раскраска и сопутствующие (запоминание строки и т.п.). Я не знаю, как это сократить. Покажете?
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 »

Event на DN_LISTCHANGE, посылающий Ctrl-Enter.
Строк 10?

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

Но без подстветки.
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: Sat 28 Dec, 2019 16:19 Event на DN_LISTCHANGE, посылающий Ctrl-Enter.
Во, спасибо. У меня Event на DN_INPUT и проверка, сменилась ли позиция. Упрощу.
Посылка Ctrl+Enter - у меня чтение строки (4 строки) и editor.SetPosition . Для раскраски чтение всё равно нужно. Так на так.
А за DN_LISTCHANGE - отдельное спасибо. Можно будет несколько строчек сократить.
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, то ли я что-то не то делаю, то ли DN_LISTCHANGE не приходит в Event. Или надо как-то зарегистрировать? А жаль - вот это как раз могло помочь здорово сократить текст … :-(

upd
В описании подписки (far.SubscribeDialogDrawEvents) DN_LISTCHANGE не указан. Так что подписка тут ни при чём. На баг очень похоже… Не глянете? Может, действительно, баг?
Last edited by buniak_a_h on Sat 28 Dec, 2019 18:37, 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 »

подсветка это очень хорошо,
а про переход по КтрлЕнтер я тоже не знал ой как много лет..
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: Sat 28 Dec, 2019 18:46 подсветка это очень хорошо,
На самом деле в версии 1.2.1 имеется ошибочка: при поиске по регулярным выражениям учитывается регистр независимо от флага Case Sensitive. У себя я исправил, но тут появилась критика, хочу разобраться прежде чем выкладывать 1.2.2. Очень обидно, что в Event не приходит DN_LISTCHANGE !!! :mad:
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,
я попытался понять, и думаю что JD это, немного обознамшись..
У нас список найденного "всего" - это MENU а не LIST

Это все-таки ЛИСТ, но видимо то что он находится в MENU, не производит оное событие
У меня например это событие ловится в других местах, там где диалоги, а где меню - там не ловится
Тогда наверное нужен DN_MENUCHANGE тогда уж, (а не DN_LISTCHANGE),
- но такого кажется что нет в природе
Можно обрабатывать DN_INPUT/DN_CONTROLINPUT, и брать из Menu.Value значение
Или вы так и делаете?
Last edited by Xerox on Sat 28 Dec, 2019 20:31, 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 »

Xerox wrote: Sat 28 Dec, 2019 19:52 Можно обрабатывать DN_INPUT, и брать из Menu.Value значение (?)
Или вы так и делаете?
Почти. Обрабатываю действительно DN_INPUT, а затем в первом итеме диалога (который на самом деле DI_LISTBOX) ищу в 6-м элементе (который на самом деле List) элемент с установленным флагом LIF_SELECTED. Т.е. хоть это и МЕНЮ, но и диалог с LISTBOX-ом тоже. Но Вы правы, надо попробовать вместо поиска среди элементов LISTBOX-а текущего получать всё, что надо, из MENU.
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, к сожалению не нашёл, как определить номер пункта Menu. Value выдаёт только текст пункта. Казалось бы, для полноты функционала логично было бы предусмотреть выдачу не только текста, но и номера. Увы… А номер я использую чтоб определить, было ли смещение по списку.
Post Reply

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