Page 15 of 28

LuaFAR Search

Posted: Fri 13 Nov, 2009 07:29
by Shmuel
Здесь можно обсуждать плагин LuaFAR Search. (Анонс).

LuaFAR Search

Posted: Sat 18 Jun, 2016 11:14
by gotar

Latest post of the previous page:

Можно ли узнать, что такое reader.dll и посмотреть его исходный текст? Я думаю, что ucd - это Universal Charset Detector, но не очень понимаю как его использовать с lfsearch

LuaFAR Search

Posted: Sat 18 Jun, 2016 11:28
by Shmuel
gotar
reader.dl - это вспомогательная утилита для быстрого чтения файлов, исходный код написан на Си.
ucd.dl - вы правильно определили.
Обе утилиты предназначены для внутреннего использования плагином, а не какого-либо иного использования.
Исходный код плагина на данный момент не выложен в свободный доступ.

LuaFAR Search

Posted: Sat 18 Jun, 2016 12:05
by gotar
Нужно ли им менять расширение на dll?

LuaFAR Search

Posted: Sat 18 Jun, 2016 12:11
by Shmuel
gotar wrote: Нужно ли им менять расширение на dll?
Не нужно. Расширение изменено специально, чтобы Far не пытался грузить эти DLL как плагины.

LuaFAR Search

Posted: Sat 03 Sep, 2016 12:46
by John Doe
Заинтересовался темой http://forum.farmanager.com/viewtopic.p ... 84#p140484, и попробовал оформить это пользовательским скриптом.

_usermenu.lua

Code: Select all

AddToMenu("e",":sep:Quotes")
AddToMenu ("e", "&'...'", nil, "scripts/quote", "'","'")
AddToMenu ("e", "&[...]", nil, "scripts/quote", "[","]")
AddToMenu ("e", "&{...}", nil, "scripts/quote", "{","}")
quote.lua

Code: Select all

local a,b = unpack(...)
lfsearch.EditorAction("test:replace", {
  bRegExpr=true,
  sScope="block",
  sOrigin="scope",
  sSearchPat = ".+",
  sReplacePat = a.."$0"..b,
})

LuaFAR Search

Posted: Sat 03 Sep, 2016 12:53
by John Doe
Обнаружил только что после замены выделение неправильно (не только скриптом, но и интерактивно).
На примере quote.lua, если выделить слово unpack, то после замены выделение будет в 2 раза больше чем надо, т.е. вылезет за конец строки.

LuaFAR Search

Posted: Sat 03 Sep, 2016 13:00
by John Doe
P.S.
И не обнаружил функции многострочной замены для скриптов..
А встроенная интерактивная для данной задачи не очень подходит тем что не учитывает позиции начала и конца выделения.

Учитывая это изменил _usermenu.lua так:

Code: Select all

local sel = editor.GetSelection()
if sel and sel.StartLine==sel.EndLine then
  AddToMenu("e",":sep:Quotes")
  AddToMenu ("e", "&'...'", nil, "scripts/quote", "'","'")
  AddToMenu ("e", "&[...]", nil, "scripts/quote", "[","]")
  AddToMenu ("e", "&{...}", nil, "scripts/quote", "{","}")
end
Подозреваю, что это не совсем идеологически правильно, но не нашёл другого пути запретить работу при многострочном выделении.
Логично было бы использовать sInitFunc, но в справке не сказано что с её помощью можно отменять замену.

LuaFAR Search

Posted: Sat 03 Sep, 2016 14:03
by Shmuel
John Doe wrote: Обнаружил только что после замены выделение неправильно (не только скриптом, но и интерактивно)
Подтверждаю. Скорее всего, это недавно внесённый баг. Буду смотреть.
John Doe wrote: И не обнаружил функции многострочной замены для скриптов..
Она есть, только в хелпе её нет :(
John Doe wrote: А встроенная интерактивная для данной задачи не очень подходит тем что не учитывает позиции начала и конца выделения.
Это так. :(
John Doe wrote: Логично было бы использовать sInitFunc, но в справке не сказано что с её помощью можно отменять замену.
Есть bRepIsFunc.

LuaFAR Search

Posted: Sat 03 Sep, 2016 14:17
by John Doe
Shmuel wrote: Есть bRepIsFunc.
Функция будет вызвана для каждого найденного вхождения в любом случае. Сдаётся, что мой метод прямолинейней).
Shmuel wrote: Это так.
Не вижу как полезно применить это неразличение.
Предлагаю выделение рассматривать строго, для вертикального блока тоже.

LuaFAR Search

Posted: Sat 03 Sep, 2016 14:26
by Shmuel
John Doe wrote: Не вижу как полезно применить это неразличение.
Ну там же вроде был смайлик "Sad", который не вошёл в цитату.
John Doe wrote: Предлагаю выделение рассматривать строго, для вертикального блока тоже.
Логично. Если руки дойдут.

LuaFAR Search

Posted: Sat 03 Sep, 2016 14:45
by John Doe
Спасибо.
Shmuel wrote: Она есть, только в хелпе её нет
А пользоваться можно? Как она зовётся?

LuaFAR Search

Posted: Sat 03 Sep, 2016 14:58
by Shmuel
John Doe, вот все функции таблицы lfsearch:

Code: Select all

╔══════════════════════════╗
║  1│ EditorAction         ║
║  2│ MReplaceDialog       ║
║  3│ MReplaceEditorAction ║
║  4│ ReplaceFromPanel     ║
║  5│ SearchFromPanel      ║
║  6│ SetDebugMode         ║
╚══════ 6 arguments ═══════╝
Использование MReplaceEditorAction можно посмотреть в файле test_lfsearch.lua.

LuaFAR Search

Posted: Sat 17 Sep, 2016 08:48
by Shmuel
ccaid wrote: если использовать поиск от курсора, то обычно (в других плагинах, других редакторах) поиск доходит до конца файла и спрашивает, не продолжить ли с начала, и завершает круг при положительном ответе. здесь такой возможности нет.
Не прошло и года, и такая возможность уже есть. Правда сделано несколько по-другому: запроса пользователя нет, но в диалоге есть опция "Искать по кругу".

LuaFAR Search

Posted: Tue 25 Oct, 2016 23:36
by Sim
Давно перешел на использование этого плагина в повседневной работе, часто выручает, но вот столкнулся с такой задачей, когда надо в большом списке файлов произвести замену текста по регулярному выражению, причем так, что искомый текст содержит перенос строки, LuaFAR Search умеет делать поиск когда весь файл воспринимается как одна строка, но почему нет этой опции при замене текста? Как бы нет препятствий для того чтобы такая опция таки была...

LuaFAR Search

Posted: Wed 26 Oct, 2016 07:25
by Shmuel
Sim wrote: умеет делать поиск когда весь файл воспринимается как одна строка, но почему нет этой опции при замене текста? Как бы нет препятствий для того чтобы такая опция таки была...
Неудачное название опции "Файл как строка" вводит в заблуждение. Плагин не читает все файлы одним куском, чтобы не затыкаться на очень больших файлах. Он читает кусками в несколько мегабайт, с перекрытием кусков. Этот алгоритм может не найти некоторые вхождения, если их длина больше размера перекрытия.

Для замены алгоритм с перекрытием кусков применять нельзя, ибо возможны некорректные замены, что можно трактовать как потерю данных. Единственное лечение здесь - действительно читать весь файл одним куском. Реализовать это не очень сложно, но сложно красиво обрабатывать ситуации, когда памяти не хватает. На данный момент замена из панелей - построчная. Может как-нибудь что-нибудь придумаю.

LuaFAR Search

Posted: Wed 26 Oct, 2016 10:07
by Sim
Shmuel, файл может вообще не содержать переводов строки, тогда что? будет затык? да пусть лучше обработка такого большого текста на несколько мегабайт затянется немного, но работа будет выполнена. Я так считаю. Может добавить параметр с которым плагин будет считывать весь файл целиком и обрабатывать его как одну строку? а что из этого выйдет ... зависнет фар или просто долго будет работать операция это уже проблема пользователя, как бы знает что делает, и какого размера у него файлы.