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

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

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

Post by John Doe » Mon 04 Aug, 2014 23:58

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

Управление:
  • 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 позиция не восстанавливается)


Актуальная версия: IncSearch2.9.7z

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

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

Post by John Doe » Sun 02 Aug, 2015 20:34

Latest post of the previous page:

Shmuel wrote: без переключения режима ввода пользователем не обойтись.
Я (пока тоже теоретически) предполагаю, что режим, о котором вы говорите, можно включать автоматически, обнаружив в строке некорректный регэксп.
Фаровский регэксп должно быть легко проверить на корректность (а вот насчёт lua-паттерна не уверен).

Shmuel
Posts: 5230
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Sun 02 Aug, 2015 21:16

Дело в том, что начальная часть регекспа может быть и корректной, но для пользователя может не иметь смысла делать по ней инкрементальный поиск - лишнее мелькание и утомление глаз. Поэтому здесь искуственный интеллект не способен угадать, чего надо пользователю.

buniak_a_h
Posts: 362
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 39 times
Been thanked: 5 times
Contact:

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

Post by buniak_a_h » Mon 18 Apr, 2016 18:48

Надо бы поправить мелочь: функция far.InputRecordToName при нажатии на "\" возвращает Key=BackSlash ... В результате поиск с ним тут же прекращается.
Программировать просто. Знай, жми себе на кнопочки... © Владелец IT-компании

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

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

Post by John Doe » Fri 22 Jul, 2016 14:48

buniak_a_h wrote: Надо бы поправить мелочь: функция far.InputRecordToName при нажатии на "\" возвращает Key=BackSlash ... В результате поиск с ним тут же прекращается.
См. viewtopic.php?p=125091#p125091 (в шапке не последняя версия)

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

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

Post by John Doe » Fri 22 Jul, 2016 14:59

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

Это давно уже так, вероятно с билда 4337

aflexus
Posts: 36
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Wed 03 Aug, 2016 11:58

John Doe
Кириллицу не поддерживает?

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

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

Post by John Doe » Wed 03 Aug, 2016 12:17

Поддерживает

aflexus
Posts: 36
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Wed 03 Aug, 2016 13:14

Хм, почему тогда при переключении раскладки RAlt перестает включать скрипт?

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

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

Post by John Doe » Wed 03 Aug, 2016 13:32

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

Если не хотите трогать раскладку, то нужно изменить клавишу активации на другую.

aflexus
Posts: 36
Joined: Sat 12 Mar, 2011 16:57
Has thanked: 4 times

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

Post by aflexus » Wed 03 Aug, 2016 14:35

John Doe wrote: Вероятно особенность раскладки, см. Правый Alt не работает в русской раскладке
Да, так и оказалось. Удалил KB2970228 - все ок. Спасибо.

ccaid
Posts: 805
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 9 times
Been thanked: 5 times

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

Post by ccaid » Wed 14 Dec, 2016 18:17

натолкнулся на непонятки.
как воспроизвести (проверялось под 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: 11411
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 17 times
Been thanked: 101 times

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

Post by John Doe » Wed 14 Dec, 2016 19:15

Что если изменить на local k=akey(1,1)

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

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

Post by HaRT » Wed 14 Dec, 2016 20:30

Попробовал этот скрипт — удобно, спасибо! (Пока пользуюсь без 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: 805
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 9 times
Been thanked: 5 times

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

Post by ccaid » Thu 15 Dec, 2016 05:30

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

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

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

Post by John Doe » Thu 15 Dec, 2016 10:14

ccaid wrote: но что не так с akey(1)
Тонкости проявляются при вызове вложенного макроса через eval(macrokey,2)
В этом случае akey(1,1) вернёт нужную нам клавишу macrokey, а akey(1) же вернёт клавишу, которой выл вызван изначальный макрос, в данном случае RAlt.
Вывод: общем случае надо всегда использовать akey(1,1).

А akey(1) может понадобиться разве что в каком-то очень специальном случае.
Это имело смысл ещё до lua, когда подпрограммы можно было реализовать только через вложенные макросы.
А сейчас, имхо, только путает.

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

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

Post by HaRT » Thu 15 Dec, 2016 12:41

John Doe, воспроизводится ли у Вас поведение, описанное в первой части моего сообщения?
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by John Doe » Thu 15 Dec, 2016 15:39

То ли не воспроизводится, то ли я не уловил суть проблемы.
Давайте по частям:

(1) У меня любой символ стирается сразу.
То что вы описываете похоже на неперерисовку редактора. Версия фар последняя ночная?

(2) А при стирании последнего символа действительно можно было бы ожидать перехода в исходную позицию, как до начала поиска.
В данный момент этого не происходит. Запишу в todo, но не уверен что вернусь к этому в ближайшее время.

Post Reply

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