Regular Expression Search and Replace (RESearch)

Здесь можно обсудить ваш любимый плагин.

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Latest post of the previous page:

Баги.
1. Не получается закрыть диалог настроек Common Settings.
2. Перепутаны местами определения функций CallRS и CallRSS, поэтому FarLUA не работает.

Неудобства.
3. Первый запуск сильно тормозит.
Измерять в свежезапущенном фаре: lua:local a=Far.UpTime;Keys"F11 s";msgbox(Far.UpTime-a)

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Cavaler wrote:Еще я обнаружил GetLuaState(), торчащий из luamacro.dll, может как-то тоже поиспользую.
Удалось? Как вы реализовали доступ скрипта к функциям research (match etc)?
(Я указывал на один из вариантов, но что именно вы сделали в changelog не описывается)
Cavaler wrote:А в случае FarLUA было бы неплохо как-то один раз скрипт скомпилировать и несколько раз запустить.
(Только что заметил добавленную запись).
Это возможно с помощью loadstring. Могу предоставить код.

Ещё выше я предлагал оптимизировать определения макросов:
http://forum.farmanager.com/viewtopic.p ... 45#p118745
http://forum.farmanager.com/viewtopic.p ... 98#p119098

И реализовать функцию result, чтобы уменьшить отличия от других движков.

User avatar
Cavaler
Posts: 1173
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 5 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

John Doe wrote:Первый запуск сильно тормозит.
Измерять в свежезапущенном фаре: lua:local a=Far.UpTime;Keys"F11 s";msgbox(Far.UpTime-a)
Максимум удалось получить полсекунды...

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Полсекунды это ощутимо. Но у меня и больше получалось.

User avatar
Cavaler
Posts: 1173
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 5 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

John Doe wrote:
Cavaler wrote:Еще я обнаружил GetLuaState(), торчащий из luamacro.dll, может как-то тоже поиспользую.
Удалось? Как вы реализовали доступ скрипта к функциям research (match etc)?
(Я указывал на один из вариантов, но что именно вы сделали в changelog не описывается)
Нет, не стал. Сделал _G.research.
John Doe wrote:
Cavaler wrote:А в случае FarLUA было бы неплохо как-то один раз скрипт скомпилировать и несколько раз запустить.
(Только что заметил добавленную запись).
Это возможно с помощью loadstring. Могу предоставить код.
Давай.
John Doe wrote:Ещё выше я предлагал оптимизировать определения макросов:
http://forum.farmanager.com/viewtopic.p ... 45#p118745
http://forum.farmanager.com/viewtopic.p ... 98#p119098
Не вижу смысла.
John Doe wrote:И реализовать функцию result, чтобы уменьшить отличия от других движков.
А и так есть различия, как минимум в необходимости слова research. А возврат значения как положено по return как-то более очевиден.

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Cavaler wrote:
John Doe wrote:Ещё выше я предлагал оптимизировать определения макросов:
http://forum.farmanager.com/viewtopic.p ... 45#p118745
http://forum.farmanager.com/viewtopic.p ... 98#p119098
Не вижу смысла.
Смысл очень даже конкретный: чёткая и компактная таблица, помещается на экране, что позволяет охватить одним взглядом все функции плагина.
Некоторые функции в таблице не имеют хоткеев, но пользователь легко впишет удобную ему клавишу.
Cavaler wrote:А и так есть различия, как минимум в необходимости слова research
Необходимость эта в 2 счёта устраняется.
А если реализовать "прекомпиляцию", то будет ещё проще: определять и хранить функции не понадобится вообще.
Сейчас составлю примерный код...

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

  1. Перед запуском проверяем корректность кода: MSSC_CHECK
  2. Если всё хорошо, то через MCTL_EXECSTRING присваивает какой-либо глобальной переменной скомпилированную функцию,
    В качестве SequenceText строка _G.RESearch_f = setfenv(loadstring(...), setmetatable({},{ __index=_G })), а в качестве параметра передать код, введённый пользователем (или можно вставить его в строку вместо ...).
  3. На каждое найденное вхождение вызываем MCTL_EXECSTRING, в качестве SequenceText строка _G.RESearch_f(...), параметры передаём те же, что и сейчас.
  4. После завершения глобальную переменную можно удалить, присвоив ей nil.
    Кстати для верности вместо _G.RESearch_f можно выбрать имя подлиннее.
Ещё один момент: дать пользователю возможность использовать функции match (и др.) без префикса "research".
Для этого надо в шаге 2 вместо пустой таблицы {} подставить таблицу с внутренними функциями.

При таком подходе внутренние функции остаются внутри, и не зависят от внешнего RESearch.lua (оттуда их надо убрать).
Можно конечно оставить их в файле, где-нибудь в папке плагина, и читать оттуда.
Last edited by John Doe on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Исправлено

EGez
Posts: 144
Joined: Thu 04 Oct, 2012 13:53
Location: Hamburg, DE
Has thanked: 2 times
Been thanked: 2 times

Re: Regular Expression Search and Replace (RESearch)

Post by EGez »

Доброй ночи,

хотел вот попробовать найденное для замены на оброботку FarLUA отдать (пример):


Получил вот такое:


И еще мелочь одна, AltF6 в Shell не стоило бы занимать... ;)

Far 3.0.3952 / LuaJIT 2.0.3 / RESearch 8.4.7 / Win7x86

Благодарю

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

EGez
Ошибка в макрофайле, см. выше.

User avatar
Cavaler
Posts: 1173
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 5 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

John Doe wrote:
  1. Перед запуском проверяем корректность кода: MSSC_CHECK
  2. Если всё хорошо, то через MCTL_EXECSTRING присваивает какой-либо глобальной переменной скомпилированную функцию,
    В качестве SequenceText строка _G.RESearch_f = setfenv(loadstring(...), setmetatable({},{ __index=_G })), а в качестве параметра передать код, введённый пользователем (или можно вставить его в строку вместо ...).
  3. На каждое найденное вхождение вызываем MCTL_EXECSTRING, в качестве SequenceText строка _G.RESearch_f(...), параметры передаём те же, что и сейчас.
  4. После завершения глобальную переменную можно удалить, присвоив ей nil.
    Кстати для верности вместо _G.RESearch_f можно выбрать имя подлиннее.
Попробовал. Похоже, смысла в этом нет, потому что все равно на каждом шаге вызывается парсер, пусть и для каждый раз одной и той же строки.
Разве что, для сложных функций будет смысл - но не очень понятно, большой ли.

User avatar
Cavaler
Posts: 1173
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 5 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

John Doe wrote:Ещё один момент: дать пользователю возможность использовать функции match (и др.) без префикса "research".
Для этого надо в шаге 2 добавить в начало пользовательского кода все те определения, что сейчас в RESearch.lua, но как локальные.
Вот в этом смысл есть, конечно.

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Я пробовал добавить определения функций в сам скрипт.
Необходимость парсить их каждый раз заметно влияет на время выполнения.
Вывод: смысл всё-таки есть.

А чтобы парсер вообще не вызывался в каждой итерации - надо использовать Lua C API (+LuaFAR)

User avatar
Cavaler
Posts: 1173
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 5 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

John Doe wrote:Я пробовал добавить определения функций в сам скрипт.
Необходимость парсить их каждый раз заметно влияет на время выполнения.
Вывод: смысл всё-таки есть.
Ну да, вторая часть влечет за собой первую.
John Doe wrote:А чтобы парсер вообще не вызывался в каждой итерации - надо использовать Lua C API (+LuaFAR)
Времени только мало...

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

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Времени только мало...
В общем-то скорость и так приемлема, если конечно замен не 10^6.
Но потенциал развития у lua-скриптов есть, можно сделать удобнее.

White_Owl
Posts: 16
Joined: Thu 06 Feb, 2014 23:07

Re: Regular Expression Search and Replace (RESearch)

Post by White_Owl »

RESearch 8.47, Far3-64

Ищу файл: Alt+F7, галочка в "As regular expression" снята. Задан простой текст. Нажимаю Ok - появляется окно "ищем" в котором показывается сколько файлов просмотрено и сколько найдено. Потом это окно исчезает и... все. Если файлов для поиска мало, то просто окно поиска закрывается и никто никуда не идет. Нашли или не нашли не известно.

Если ставлю галочку "регулярные выражения" (ищу то-же самое простое слово), то сначала вылезает

Code: Select all

╔══════════════════════════════════════ Error ═══════════════════════════════════════╗
║ Incorrect or damaged C:\Program Files\Far Manager\Plugins\RESearch\RESearchEng.lng ║
║                               Message 280 not found                                ║
╟────────────────────────────────────────────────────────────────────────────────────╢
║                                  { Ok } [ Quit ]                                   ║
╚════════════════════════════════════════════════════════════════════════════════════╝
А по Ok, появляется второй диалог:

Code: Select all

╔═══════════════════╗
║ nothing to repeat ║
╟───────────────────╢
║        *.*        ║
║        ^          ║
╟───────────────────╢
║      { Ok }       ║
╚═══════════════════╝
И чего это значит?

User avatar
Cavaler
Posts: 1173
Joined: Mon 27 Jun, 2005 12:06
Been thanked: 5 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by Cavaler »

White_Owl wrote:RESearch 8.47, Far3-64

Ищу файл: Alt+F7, галочка в "As regular expression" снята. Задан простой текст. Нажимаю Ok - появляется окно "ищем" в котором показывается сколько файлов просмотрено и сколько найдено. Потом это окно исчезает и... все. Если файлов для поиска мало, то просто окно поиска закрывается и никто никуда не идет. Нашли или не нашли не известно.

Если ставлю галочку "регулярные выражения" (ищу то-же самое простое слово), то сначала вылезает

Code: Select all

╔══════════════════════════════════════ Error ═══════════════════════════════════════╗
║ Incorrect or damaged C:\Program Files\Far Manager\Plugins\RESearch\RESearchEng.lng ║
║                               Message 280 not found                                ║
╟────────────────────────────────────────────────────────────────────────────────────╢
║                                  { Ok } [ Quit ]                                   ║
╚════════════════════════════════════════════════════════════════════════════════════╝
А по Ok, появляется второй диалог:

Code: Select all

╔═══════════════════╗
║ nothing to repeat ║
╟───────────────────╢
║        *.*        ║
║        ^          ║
╟───────────────────╢
║      { Ok }       ║
╚═══════════════════╝
И чего это значит?
А у тебя точно .lng скопирован не от предыдущей какой-нибудь сборки?

Post Reply

Return to “Обсуждение плагинов”