IncSearch — быстрый поиск в редакторе

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Инкрементальный поиск — это поиск без диалогового окна.
Введённый текст отображается в строке статуса и ищется сразу по мере его набора.

Управление:
  • RAlt — включить режим инкрементального поиска.
    Если в текущей строке есть выделенный текст — он подхватывается.
  • BS — удалить последний введённый символ.
    При пустой строке: восстановить предыдущую строку.
  • CtrlBS — очистить строку поиска.
  • ShiftIns/CtrlV — вставить строку из буфера обмена.
  • ShiftF7/F3/Enter — найти следующее вхождение строки.
  • AltF7/ShiftF3/ShiftEnter — найти предыдущее вхождение строки.
  • Нажатие любой алфавитно-цифровой (или символьной) клавиши добавляет символ к искомой строке.
  • Нажатие любой функциональной клавиши отключает режим поиска, клавиша передаётся фару.
    (Это касается клавиш управления курсором, и всех клавиш с модификаторами Ctrl/Alt/Shift).
  • Для прекращения поиска можно также воспользоваться повторным нажатием RAlt.
  • Esc — прекращает поиск и восстанавливает исходную позицию.
В данной реализации используются функции встроенного поиска FAR, или функции плагина EdtFind, если он доступен
(можно запретить useEdtFind = false).
Использование плагина позволяет выделить сразу все вхождения строки в тексте.

Настройка:
  • В начале скрипта в переменной options можно задать умолчания для параметров
    WholeWords, RegExp, CaseSensitive, HighLight
    В процессе поиска значения можно изменить шорткатами Alt-W/G/C/H (всё кроме Alt-H работает и без плагина EdtFind).
  • Специальный режим поиска: ExtraQuick: каждое нажатие не только прибавляет символ к строке поиска, но и ищет следующее вхождение.
    Активируется параметром ExtraQuick в начале скрипта, или шорткатом Alt-Q.
  • Назначив переменную useBM можно активировать установку закладки при начале поиска (при этом по Esc позиция не восстанавливается)


Актуальная версия: 2.10
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Latest post of the previous page:

CtrlBackSlash примерно это и делает, только в диалоге.
(Скорее всего без диалога было бы лучше, но это требует более глубокого ковыряния в коде, чего я себе сейчас позволить не могу).

А в перспективе надеюсь реализовать прозрачную работу, без диалогов, и даже без всяких дополнительных клавиш.
Shmuel
Posts: 6166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 329 times

IncSearch — быстрый поиск в редакторе

Post by Shmuel »

John Doe wrote: реализовать прозрачную работу, без диалогов, и даже без всяких дополнительных клавиш.
Признаюсь, что данный скрипт я не пробовал, рассуждаю чисто теоретически, но если будут поддерживаться регулярные выражения, то без переключения режима ввода пользователем не обойтись.
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Shmuel wrote: без переключения режима ввода пользователем не обойтись.
Я (пока тоже теоретически) предполагаю, что режим, о котором вы говорите, можно включать автоматически, обнаружив в строке некорректный регэксп.
Фаровский регэксп должно быть легко проверить на корректность (а вот насчёт lua-паттерна не уверен).
Shmuel
Posts: 6166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 329 times

IncSearch — быстрый поиск в редакторе

Post by Shmuel »

Дело в том, что начальная часть регекспа может быть и корректной, но для пользователя может не иметь смысла делать по ней инкрементальный поиск - лишнее мелькание и утомление глаз. Поэтому здесь искуственный интеллект не способен угадать, чего надо пользователю.
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

IncSearch — быстрый поиск в редакторе

Post by buniak_a_h »

Надо бы поправить мелочь: функция far.InputRecordToName при нажатии на "\" возвращает Key=BackSlash ... В результате поиск с ним тут же прекращается.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

buniak_a_h wrote: Надо бы поправить мелочь: функция far.InputRecordToName при нажатии на "\" возвращает Key=BackSlash ... В результате поиск с ним тут же прекращается.
См. http://forum.farmanager.com/viewtopic.p ... 91#p125091 (в шапке не последняя версия)
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

P.S.
John Doe wrote: Реализован немодальный поиск:
Функциональность немодального поиска несколько уменьшилась, т.к. при нажатом Alt перестали распознаваться клавиши LCtrl/RCtrl..

Это давно уже так, вероятно с билда 4337
aflexus
Posts: 51
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 13 times

IncSearch — быстрый поиск в редакторе

Post by aflexus »

John Doe
Кириллицу не поддерживает?
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Поддерживает
aflexus
Posts: 51
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 13 times

IncSearch — быстрый поиск в редакторе

Post by aflexus »

Хм, почему тогда при переключении раскладки RAlt перестает включать скрипт?
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Вероятно особенность раскладки, см. http://forum.farmanager.com/viewtopic.php?f=4&t=9241

Если не хотите трогать раскладку, то нужно изменить клавишу активации на другую.
aflexus
Posts: 51
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 13 times

IncSearch — быстрый поиск в редакторе

Post by aflexus »

John Doe wrote: Вероятно особенность раскладки, см. Правый Alt не работает в русской раскладке
Да, так и оказалось. Удалил KB2970228 - все ок. Спасибо.
ccaid
Posts: 869
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 19 times
Been thanked: 5 times

IncSearch — быстрый поиск в редакторе

Post by ccaid »

натолкнулся на непонятки.
как воспроизвести (проверялось под Win10 x64):
чистый фар, конкретно: Far30b4869.x86.20161214.7z — делаем локальный профиль. добавляем в скрипты AltScreens.lua из Addons и IncSearch2.9.7z
запускаем Far.exe, открываем в редакторе файл (changelog), активируем IncSearch нажатием RAlt, а теперь жмём LAlt1 с целью перейти в панели. Скрипт AltScreens получает управление, но akey(1) выдаёт ему клавишу RAlt вместо LAlt1.
для визуализации эффекта скрипт AltScreens можно изменить, например, так:

Code: Select all

local k=akey(1)
msgbox('AltScreens',k)
Keys('F12', k:sub(-1))
с одной стороны, в моем скрипте быстрого поиска такого эффекта нет. с другой стороны, как вызвать скрипт и подменить ему клавишу вызова непонятно, если это не баг. с третьей стороны, я и не пытался найти легальный (через доступное АПИ) способ добиться этого эффекта.
Фар делают добрые люди
User avatar
John Doe
Бюрократ
Posts: 12871
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

IncSearch — быстрый поиск в редакторе

Post by John Doe »

Что если изменить на local k=akey(1,1)
User avatar
HaRT
Moderator
Posts: 9524
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 228 times

IncSearch — быстрый поиск в редакторе

Post by HaRT »

Попробовал этот скрипт — удобно, спасибо! (Пока пользуюсь без EdtFind.)

Однако в поиске — и модальном, и немодальном — в режиме ExtraQuick при последовательном стирании введённых символов по [b]BS[/b] самый первый (левый) символ сперва не стирается (соответственно, переход на позицию начала поиска не происходит), а при повторной попытке он-таки стирается, но вновь без перехода (и дальнейшие нажатия [b]BS[/b] ожидаемо ничего не меняют). По [b]Esc[/b] возврат происходит нормально.

А в немодальном поиске каждая новая буква (скажем, строчная) почему-то не добавляется к искомому, а ищется вперёд как таковая.

Правда, поскольку [b]RAlt[/b] у меня почему-то не распознаётся (даже при английском языке ввода — может, клавиатура ущербная, не изучал), матчинг кнопок пришлось . Но вроде бы это не должно так влиять.
Именно оно и влияло. А [b]RAlt[/b] у меня ломает KeyMan.

Win 8.1 Ent x64, Far Manager v3.0 build 4868 x86 (2016-12-12) без прочих плагинов и макросов.
Фар есть инструмент, а не нянька. © 2009 DrKnS
ccaid
Posts: 869
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 19 times
Been thanked: 5 times

IncSearch — быстрый поиск в редакторе

Post by ccaid »

John Doe wrote: Что если изменить на local k=akey(1,1)
в этом случае проблемы нет.
коррекцией AltScreens я тоже решил проблему (другим, менее эффективным путем).
но что не так с akey(1)? скрипты не могут свободно его использовать? или в AltScreens он был применен неправильно? или «мы просто нашли дыру»?
Фар делают добрые люди
Post Reply

Return to “Полезные макросы и скрипты”