Расширение скриптами функциональности поиска/замены в редакторе
-
Дмитрий Журко
- Posts: 131
- Joined: Tue 19 Jan, 2021 21:49
- Has thanked: 28 times
- Been thanked: 1 time
Расширение скриптами функциональности поиска/замены в редакторе
Спасибо, сам подход для меня нов. Наверное, так легко приделать сохранение умолчаний для поиска и замены, для диалогов F7 и CtrlF7? Очень меня мучает то, что макросы шалят там невидимо.
Last edited by HaRT on Sun 17 Dec, 2023 16:37, edited 1 time in total.
Reason: Тема отделена, добавлена ссылка на исходное обсуждение.
Reason: Тема отделена, добавлена ссылка на исходное обсуждение.
-
Дмитрий Журко
- Posts: 131
- Joined: Tue 19 Jan, 2021 21:49
- Has thanked: 28 times
- Been thanked: 1 time
Показывать также искомую строку в заголовке результатов поиска по файлам
И захотел сразу приделать к диалогу запроса на замену, там, где [Заменить] [Все] [Пропустить] [Отменить], крест FarColorer. Кажется, там он уместен и даже дал бы новые возможности: точный контроль вертикалей. Но оказалось, что у того диалога нет Uuid -- стоят нули.
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Показывать также искомую строку в заголовке результатов поиска по файлам
Хотя я не совсем понимаю, какая связь сохранения умолчаний с моим скриптом, но отвечу, на то, что понял.Дмитрий Журко wrote: Sun 17 Dec, 2023 02:08 легко приделать сохранение умолчаний для поиска и замены, для диалогов F7 и CtrlF7?
В диалогах сохранение умолчаний текстовых полей делается просто указанием имени истории и флага DIF_HISTORY. Увы, всякие чекбоксы, радиобутоны и комбобоксы так не сохраняются. Но можно было бы иметь скрытое текстовое поле, в которое при закрытии диалога формировать соответствующую строку, а при инициализации диалога по восстановленной строке выставлять флаги указанных элементов управления.А можно поподробнее? И при чём тут макросы, ведь диалог замены - это ФАР (не макрос и даже не плагин)?
- Дмитрий Журко wrote: Sun 17 Dec, 2023 02:12 Но оказалось, что у того диалога нет Uuid -- стоят нули.
- Авторы когда-то писали, что готовы сделать ГУИДы для любого диалога по просьбе юзеров. Обращайтесь.
- Для идентификации диалога можно проверить значение первого элемента диалога. Он должен быть таким:
Да, геморройно. Но другого способа я не знаю.
Code: Select all
[1]=DI_DOUBLEBOX; [10]="Replace" -- (с учётом языка читать надо из языкового файла)
В диалоге крест? Или я чего-то не понял, или одно из двух…Дмитрий Журко wrote: Sun 17 Dec, 2023 02:12 захотел сразу приделать к диалогу запроса на замену, <…>, крест FarColorer.
-
Дмитрий Журко
- Posts: 131
- Joined: Tue 19 Jan, 2021 21:49
- Has thanked: 28 times
- Been thanked: 1 time
Показывать также искомую строку в заголовке результатов поиска по файлам
Спасибо за быстрый ответ, коллега.
(1) Вроде, связь -- техника этого дела, работы с базой настройки в стандартном диалоге. Суть моего вопроса в том, верно ли я понимаю путь, если хочу хранить и восстанавливать настройки F7 и CtrlF7.
(2) Не хочу тут подробнее, потонем. Допустим есть стандартная настройка поиска. Надо обеспечить сброс нестандартной.
(3.1) Ответ для новичка загадочен. Куда именно обращаться? Поверьте, вы лишь думаете, что все читатели всё-всё понимают. Тут как в поликлинике: "ты что, идиот, не знаешь, что сначала в каб. 108?".
Лет через пять буду знать, и других погонять. Сегодня мне проще подумать, как работать с диалогами без Uuid.
(3.2) Спасибо за путь. Я подумаю. Файл языка читать не буду, но теперь знаю, что не придумал себе сложность.
(4) Если диалог замен спрашивает, надо ли тут заменить, то ещё надо увидеть, а где это тут. Можно ковырять короткую раскладку цветов, а можно вывести CrossVisible FarColorer, который отдельно настраивается и покажет ещё, что рядом в колонке и длинной строке замены. Я подумал, что в этот момент и непечатные знаки показать не лишне.
Сейчас у меня мысль: каждый диалог без Uuid сопроводить таким светопреставлением, не разбирая. Надеюсь, что раздражать пользователя не будет. То есть Event на все неприкаянные диалоги, который расцвечивает текст в Editor, пока диалог не прикроют.
PS У меня идеи в ходе обсуждений возникают. Потому простите, если назойлив.
(1) Вроде, связь -- техника этого дела, работы с базой настройки в стандартном диалоге. Суть моего вопроса в том, верно ли я понимаю путь, если хочу хранить и восстанавливать настройки F7 и CtrlF7.
(2) Не хочу тут подробнее, потонем. Допустим есть стандартная настройка поиска. Надо обеспечить сброс нестандартной.
(3.1) Ответ для новичка загадочен. Куда именно обращаться? Поверьте, вы лишь думаете, что все читатели всё-всё понимают. Тут как в поликлинике: "ты что, идиот, не знаешь, что сначала в каб. 108?".
Лет через пять буду знать, и других погонять. Сегодня мне проще подумать, как работать с диалогами без Uuid.
(3.2) Спасибо за путь. Я подумаю. Файл языка читать не буду, но теперь знаю, что не придумал себе сложность.
(4) Если диалог замен спрашивает, надо ли тут заменить, то ещё надо увидеть, а где это тут. Можно ковырять короткую раскладку цветов, а можно вывести CrossVisible FarColorer, который отдельно настраивается и покажет ещё, что рядом в колонке и длинной строке замены. Я подумал, что в этот момент и непечатные знаки показать не лишне.
Сейчас у меня мысль: каждый диалог без Uuid сопроводить таким светопреставлением, не разбирая. Надеюсь, что раздражать пользователя не будет. То есть Event на все неприкаянные диалоги, который расцвечивает текст в Editor, пока диалог не прикроют.
PS У меня идеи в ходе обсуждений возникают. Потому простите, если назойлив.
Last edited by Дмитрий Журко on Sun 17 Dec, 2023 14:35, edited 2 times in total.
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Я уже не помню, но думаю, что на мантис записать виш - нормально будет. Ссылка на мантис - наверху страницы форума.
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Дмитрий Журко wrote: Sun 17 Dec, 2023 14:23 верно ли я понимаю путь, если хочу хранить и восстанавливать настройки F7 и CtrlF7.
- Какие конкретно настройки Вы собираетесь хранить и восстанавливать в диалогах F7 и CtrlF7?
- Я не припомню, чтоб в исходном скрипте я запоминал-восстанавливал настройки. Я там читаю историю (искомую строку), а запоминается строка без моих усилий (в диалоге поиска файла просто указано имя истории).
Применённая техника применима (извините за тавтологию) только для чтения текстовых данных, т.к. флаг DIF_HISTORY применим только к полям ввода (DI_EDIT и DI_FIXEDIT. А в исходном скрипте я использовал чтение из истории, т.к. это - простейший способ передать данные из первого диалога во второй. И я не представляю себе, чем это может помочь в диалогах поиска/замены в редакторе. И вообще - какие настройки в этих диалогах имеет смысл запоминать? Флаги (Case sensitive, Whole
words и т.п.) запоминаются и так (получить можно функциейFar.GetConfig, а вот изменить - запрещено. Моя просьба разрешить была отвергнута, как нарушающая безопасность (хотя это ограничение легко обходится: никто не запрещает менять settings через SQLite или в меню far:config посредством keystrokes).
Last edited by buniak_a_h on Sun 17 Dec, 2023 19:29, edited 1 time in total.
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
К пункту (4).
У меня есть скрипт, который раскрашивает найденный образец в редакторе по мере движения по таблице результатов поиска (если выбран Find All). Возможно, это - то, что Вы имеете в виду.
У меня есть скрипт, который раскрашивает найденный образец в редакторе по мере движения по таблице результатов поиска (если выбран Find All). Возможно, это - то, что Вы имеете в виду.
-
Дмитрий Журко
- Posts: 131
- Joined: Tue 19 Jan, 2021 21:49
- Has thanked: 28 times
- Been thanked: 1 time
Расширение скриптами функциональности поиска/замены в редакторе
Посмотрю. Сейчас сделал демку того, что задумал:buniak_a_h wrote: Sun 17 Dec, 2023 19:36 У меня есть скрипт, который раскрашивает найденный образец в редакторе по мере движения по таблице результатов поиска (если выбран Find All). Возможно, это - то, что Вы имеете в виду.
Оказалось, что трудности не там, где я предположил. Когда запустился диалог, плагины редактора недоступны. Потому Крест пришлось рисовать без FarColorer, а тогда настройка цветов на мне. Ну, и для снижения нагрузки надо поймать момент закрытия диалога, чтоб всё погасить. Идея была в том, чтобы сделать коротко и весело, не отдельную систему, а маленькую приблуду.
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Плагин FarColorer доступен. Вот пример, включающий крест при входе в диалог и гасящий после выхода:
Code: Select all
local F = far.Flags
Event {
id = "F197C248-DB99-4F40-BC92-D16B98037DF9";
group = "DialogEvent";
description = "Включение креста в диалоге подтверждения замены";
condition = function(Event, Param)
if Event == F.DE_DLGPROCEND and
( (Param.Msg == F.DN_INITDIALOG --[[and CrossVisible==nil]]) or
(Param.Msg == F.DN_CLOSE --[[and CrossVisible]]) ) then
local hDlg= Param.hDlg
local it = hDlg:send(F.DM_GETDLGITEM, 1)
return it and it[1] == F.DI_DOUBLEBOX and it[10] == 'Replace'
end
end;
action = function(Event, Param)
if Param.Msg == F.DN_INITDIALOG then
Plugin.SyncCall("D2F36B62-A470-418d-83A3-ED7A3710E5B5", "Editor", "CrossVisible", 1,3)
else
mf.postmacro(Plugin.SyncCall, "D2F36B62-A470-418d-83A3-ED7A3710E5B5", "Editor", "CrossVisible", 0)
end
end;
}
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Пока есть ограничение: по выходе крест не восстанавливается, а именно гасится. Сейчас исправлю (наверное…)
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Вот нашёл аналогичные просьбы от других юзеров. Рекомендую аналогично.Дмитрий Журко wrote: Sun 17 Dec, 2023 14:23 (3.1) Ответ для новичка загадочен. Куда именно обращаться?
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Ну вот на сегодняшний день окончательный вариант скрипта, включающего крест на диалоге подтверждения замены. Был бы уникальный GUID - было бы проще…
Code: Select all
local F = far.Flags
Event {
id = "F197C248-DB99-4F40-BC92-D16B98037DF9";
group = "DialogEvent";
description = "Включение креста в диалоге подтверждения замены";
condition = function(Event, Param)
if Event == F.DE_DLGPROCEND and
( Param.Msg == F.DN_INITDIALOG or Param.Msg == F.DN_CLOSE) then
local hDlg= Param.hDlg
local it = hDlg:send(F.DM_GETDLGITEM, 1)
if it and it[1] == F.DI_DOUBLEBOX and it[10] == 'Replace' then
local nText, nButt = 0,0
for i=2,math.huge do
it = hDlg:send(F.DM_GETDLGITEM, i)
if not it then break end
if it[1] == F.DI_TEXT then nText = nText + 1
elseif it[1] == F.DI_BUTTON then nButt = nButt + 1
end
end
return nText == 5 and nButt == 4 -- 5 текстов и 4 кнопки - признак диалога подтверждения
end
end
end;
action = function(Event, Param)
if Param.Msg == F.DN_INITDIALOG then
Plugin.SyncCall("D2F36B62-A470-418d-83A3-ED7A3710E5B5", "Editor", "CrossVisible", 1,3)
else
mf.postmacro(Plugin.SyncCall, "D2F36B62-A470-418d-83A3-ED7A3710E5B5", "Editor", "CrossVisible", 2)
end
end;
}
Last edited by buniak_a_h on Tue 19 Dec, 2023 17:49, edited 1 time in total.
- HaRT
- Moderator
- Posts: 11458
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 270 times
- Been thanked: 417 times
Расширение скриптами функциональности поиска/замены в редакторе
Не могли бы вы подытожить, в каких случаях этот скрипт будет полезен?buniak_a_h wrote: Tue 19 Dec, 2023 17:48 окончательный вариант скрипта, включающего крест на диалоге подтверждения замены
У меня крест включен всегда, и я надеялся решить две проблемные ситуации:
- Замена происходит в той части файла, которую Колорер ещё не успел раскрасить в фоне — крест не показывается.
- Текст раскрашен, крест выводится, замена нашлась в пределах того же экрана — крест показывается на старом месте, а не при найденном.
Видите ли вы способ доработать скрипт так, чтобы решить хотя бы одну из тех двух проблем и при этом устранить неожиданное отключение креста?
Фар есть инструмент, а не нянька. © 2009 DrKnS
- buniak_a_h
- Posts: 4565
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 674 times
- Contact:
Расширение скриптами функциональности поиска/замены в редакторе
Дмитрий Журко просил сделать, чтобы при запросе подтверждения на замену показывался крест, т.к. на экране не сразу видно, про какое конкретно вхождение искомого образца задаётся вопрос. Видимо, предполагается, что изначально крест выключен (иначе смысла в скрипте я не вижу).HaRT wrote: Tue 19 Dec, 2023 18:51 Не могли бы вы подытожить, в каких случаях этот скрипт будет полезен?
Видимо, эту задачу данный крипт решить не может, т.к. включает/выключает крест плагином FarColorer, а он ещё не отработал. Если это надо, то я могу сделать раскраску найденного образца (аналогично моему скрипту «Синхронизация редактора с результатами поиска (Show All)»). Хотя задача решалась бы проще, если б у этого диалога был свой GUID. Посмотрите, пож., упомянутый скрипт, имеет ли смысл сделать такую раскраску - ниже вопрос будет.HaRT wrote: Tue 19 Dec, 2023 18:51 Замена происходит в той части файла, которую Колорер ещё не успел раскрасить в фоне — крест не показывается
У меня нормально синхронизируется. Может, что-то зависит от настроек (например,HaRT wrote: Tue 19 Dec, 2023 18:51 Текст раскрашен, крест выводится, замена нашлась в пределах того же экрана — крест показывается на старом месте, а не при найденном.
[ ] Select found или [x] Persistent blocks)?
Возможно, я неправильно понял фразу « <Param1> - число: <…> 2 - согласно параметрам схемы». Т.е. если в схеме крест включён, то он должен остаться включенным… Я так думал… Но я на таких схемах не проверял, посмотрю попозже.
- HaRT
- Moderator
- Posts: 11458
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 270 times
- Been thanked: 417 times
Расширение скриптами функциональности поиска/замены в редакторе
Спасибо, но на мой взгляд это уже чересчур. Вот если бы можно было как-то заставить Колорер раскрасить текущий экран под диалогом, желательно тоже в фоне, пока я принимаю решение о замене…buniak_a_h wrote: Tue 19 Dec, 2023 19:28 Если это надо, то я могу сделать раскраску найденного образца (аналогично моему скрипту
И по
ShiftF7/AltF7 тоже? (Напомню, крест перед продолжением поиска должен показываться в пределах того же экрана.)
У меня в основных настройках Колорера выставлено показывать крест всегда, независимо от настроек схемы (там трёхпозиционный переключатель).buniak_a_h wrote: Tue 19 Dec, 2023 19:28 если в схеме крест включён, то он должен остаться включенным
Фар есть инструмент, а не нянька. © 2009 DrKnS