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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

Xerox, к сожалению не нашёл, как определить номер пункта Menu. Value выдаёт только текст пункта. Казалось бы, для полноты функционала логично было бы предусмотреть выдачу не только текста, но и номера. Увы… А номер я использую чтоб определить, было ли смещение по списку.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

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

Post by Xerox »

buniak_a_h wrote:
Sat 28 Dec, 2019 20:24
Menu.Value выдаёт только текст пункта
Да, это безобразие если так.
но можно еще посмотреть в Object.CurPos, там по-моему эта позиция и есть
Или как вариант детектить стрелка вниз-вверх, и сравнивать с предыдущим значением?
но по-моему Object.CurPos дает все что нужно
еще до кучи Menu.ItemStatus(<number-of-the-item>) возвращает 1/0/-1= current/not current/exceeded
Last edited by Xerox on Sat 28 Dec, 2019 20:39, edited 1 time in total.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

Да, спасибо. Проверил - действительно. А я уж посылаю DM_LISTGETCURPOS

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

Xerox wrote:
Sat 28 Dec, 2019 20:35
еще до кучи Menu.ItemStatus(<number-of-the-item>) возвращает 1/0/-1= current/not current/exceeded
В описании всё совсем не так … "Недоступен" - это 8 . Ну и вообще . Ну да ладно, это - лирика. Скрипт резко "полегчал". А если задать номера итемов вместо поиска (верить, что структура диалога инициации поиска не изменится), то вообще всё резко уменьшится. :-)

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

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

Post by Xerox »

Кросота вопчем
А все-таки, зачем нужен именно номер пункта в меню?
вродь все равно только выбранное значение имеет смысл (?)
И я еще подумал, не упростит ли если можно воспользоваться искуственным посыланием КтрлЕнтер при переходах?
Как вариант прилепить макрос у которого Ареа=Меню, который реагирует на стрелки Кей="Уп Даун", и который посылает КтрлЕнтер?
Last edited by Xerox on Sun 29 Dec, 2019 10:30, edited 1 time in total.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

Xerox wrote:
Sun 29 Dec, 2019 10:29
А все-таки, зачем нужен именно номер пункта в меню?
Чтобы не вызывать всю эту тягомотину с синхронизацией-разотметкой-отметкой при каждом DN_INPUT. Она на самом деле приходит на каждое движение мыши или уж не знаю от чего ещё. Это довольно ресурсоёмкий процесс (match & tonumber).
Можно, конечно, запоминать саму строку и сравнивать с предыдущей, но это тоже может оказаться ресурсоёмко: не знаю, как в LUA, а в некоторых языках многократное запоминание строк приводит к расходованию памяти, что приводит к частому вызову сборщика мусора. Если б приходил DN_LISTCHANGE, то этого не потребовалось бы.
Xerox wrote:
Sun 29 Dec, 2019 10:29
не упростит ли если можно воспользоваться искуственным посыланием КтрлЕнтер при переходах?
1. позицию всё равно надо знать (для раскраски), так что без match / tonumber не обойтись
2. а если позиция всё равно известна, то чем Keys"CtrlEnter" проще, чем editor.SetPosition(…)?
Впрочем, исходники открыты - всё в Ваших руках.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

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

Post by Xerox »

buniak_a_h wrote:
Sun 29 Dec, 2019 13:45
Впрочем, исходники открыты - всё в Ваших руках.
Не, все и так прекрасно )

DV
Posts: 386
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 14 times

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

Post by DV »

Пожелание к макросу: если искомое слово (вхождение) находится в текущей строке редактора, то при показе всех вхождений не прыгать на строку с первым найденным вхождением, а оставаться в текущей строке и сделать текущим соответствующий элемент в списке найденных вхождений.
Почему это важно. Лично я делаю поиск всех вхождений так: в окне поиска нажимаю кнопку [Word] или [Selection], чтобы подхватить текущее слово или выделенный текст, и нажимаю кнопку [All]. Когда при этом в списке найденных вхождений текущим элементом является не тот, который соответсвует текущей строке редактора (из которой я взял искомый текст), это сбивает с толку.
Last edited by DV on Mon 30 Dec, 2019 12:02, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

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

Post by John Doe »

Code: Select all

zg 30.12.2019 04:29:53 +0200 - build 5542

1. экспериментально: DN_LISTCHANGE приходит в обычные меню.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

DV wrote:
Mon 30 Dec, 2019 12:02
Пожелание к макросу: если искомое слово (вхождение) находится в текущей строке редактора, то при показе всех вхождений не прыгать на строку с первым найденным вхождением, а оставаться в текущей строке и сделать текущим соответствующий элемент в списке найденных вхождений.
Согласен. Хотя есть вопрос: если в ТЕКУЩЕЙ строке вхождения нет, надо ли позиционироваться на следующее за текущим положением вхождение? Думаю, да, но хотелось бы знать мнение.

DV
Posts: 386
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 12 times
Been thanked: 14 times

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

Post by DV »

buniak_a_h wrote:
Mon 30 Dec, 2019 12:50
если в ТЕКУЩЕЙ строке вхождения нет, надо ли позиционироваться на следующее за текущим положением вхождение?
Можно сделать опцией :) Либо на ближайшее вхождение, либо на первое.

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

John Doe, спасибо, круто! Поправлю (для версии >= 5542)
Жаль, что от нынешнего текста не избавиться, если делать совместимо для всех версий ФАРа :-(

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

Кстати! Пользуется кто-нить из читающих эту тему плагином RESearch? Там тоже есть Show All и нету синхронизации… Стоит доделывать и публиковать?

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

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

Post by John Doe »

buniak_a_h wrote:
Mon 30 Dec, 2019 13:50
если делать совместимо для всех версий ФАРа :-(
Для совместимости оставить текущую версию.
А новую развивать независимо.

Только вот сказано, что исправление экспериментальное, а значит есть вероятность, что обнаружатся негативные последствия, из-за которых придётся вернуть всё как было.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

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

Post by HaRT »

buniak_a_h wrote:
Mon 30 Dec, 2019 13:53
Пользуется кто-нить из читающих эту тему плагином RESearch?
Тему читаю, плагином пользуюсь, но не в части Show All. Т.ч. ради меня не надо, а вообще не повредило бы, поскольку автор своё детище, очевидно, давно забросил.
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 1399
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

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

Post by buniak_a_h »

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 …

Post Reply

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