QuickSearch — инкрементальный поиск в редакторе

Здесь можно обсудить ваш любимый плагин.
ccaid
Posts: 846
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 17 times
Been thanked: 5 times

Re: QuickSearch — инкрементальный поиск в редакторе

Post by ccaid » Wed 14 Apr, 2010 14:43

Latest post of the previous page:

насколько я понял, incsearch жестко перехватывает shift-ins. почему бы не сделать также. все работает, буфер вставляется, из плагина не вываливаемся. даже мысли не возникало, что могут быть здесь какие-то проблемы.
Фар делают добрые люди

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Centaur » Wed 14 Apr, 2010 15:47

ccaid wrote:поведение плагина после второго нажатия tab отличается от поведения до первого нажатия
DeeZ wrote:
Centaur wrote:Добавил принудительную перерисовку, вдруг поможет?
да. помогло =) но стало сильно моргать при вводе каждой новой буквы в паттерн.
0.0.2.3.
ccaid wrote:предложение на обсуждение. сделать такую фичу: после второго нажатия tab — (1) если патерн вводился явно, то в нем оставляется только та часть, которая была найдена, и удаляется из него ненайденный хвост; (2) если патерн не вводился явно, то подхватывается выделение.
Каким боком это относится к фиче выделения блока? Ну, то есть, почему так сильно перегружать Tab?
ccaid wrote:насколько я понял, incsearch жестко перехватывает shift-ins. почему бы не сделать также.
Потому что я не вижу, как можно жёстко перехватить занятую макросом клавишу, если не писать собственный цикл выборки сообщений. А именно от этого я ушёл, чтобы работали макросы вида F11 q f ShiftIns.

А что, у тебя и на CtrlV тоже макрос?

И да, кстати. Как часто мы вообще хотим именно вставлять содержимое буфера в паттерн? У меня сложилось впечатление, что обычно мы хотим несколько другого: (а) найти следующее вхождение буфера; (б) подхватить в буфер текущее выделение и найти его следующее вхождение. Ну так надо написать макросы на эти конкретные юзкейсы. Им наличие макроса на ShiftIns будет по барабану.

Code: Select all

Apps          = F11 q f            ;QuickSearch Forward
ShiftApps     = F11 q b            ;QuickSearch Backward
CtrlApps      = F11 q f ShiftIns   ;QuickSearch clipboard forward
CtrlShiftApps = F11 q b ShiftIns   ;QuickSearch clipboard backward
AltApps       = Clip(5,2) CtrlIns F11 q f ShiftIns                 ;QuickSearch selected forward
AltShiftApps  = Clip(5,2) CtrlIns Editor.Sel(1,0) F11 q b ShiftIns ;QuickSearch selected backward
Или ещё вот так. Отдаём первую клавишу после запуска плагина необработанной:

Code: Select all

F11 q f eval(waitkey(0,0))

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

Re: QuickSearch — инкрементальный поиск в редакторе

Post by ccaid » Wed 14 Apr, 2010 17:06

Centaur wrote:
ccaid wrote:предложение на обсуждение. сделать такую фичу: после второго нажатия tab — (1) если патерн вводился явно, то в нем оставляется только та часть, которая была найдена, и удаляется из него ненайденный хвост; (2) если патерн не вводился явно, то подхватывается выделение.
Каким боком это относится к фиче выделения блока? Ну, то есть, почему так сильно перегружать Tab?
сторонний эффект. когда tab нажимается сразу после входа в поиск, то имеющееся выделение играет роль первого патерна. остался один шаг, чтобы убрать между ними разницу — „засунуть“ выделение в буфер патерна. а по поводу удаления хвоста: когда вставляется большой, особенно многострочный, фрагмент, то скорее всего куча символов будет лишней и породит сообщение ‘not found’. забивать их долго, а тут два нажатия и готово.
согласен, что вещи не первой необходимости, и если никому не нравятся, отстаивать их не буду.
Centaur wrote:Потому что я не вижу, как можно жёстко перехватить занятую макросом клавишу, если не писать собственный цикл выборки сообщений. А именно от этого я ушёл, чтобы работали макросы вида F11 q f ShiftIns.
понятно.
Centaur wrote:А что, у тебя и на CtrlV тоже макрос?
нет. но shift-ins у меня на рефлексах и под руками, а про ctrl-v я буду долго вспоминать.
Centaur wrote:И да, кстати. Как часто мы вообще хотим именно вставлять содержимое буфера в паттерн?
может и нечасто. тем более: специфический обход для редко используемой вещи не будет использоваться никогда.
Centaur wrote:

Code: Select all

Apps          = F11 q f            ;QuickSearch Forward
ShiftApps     = F11 q b            ;QuickSearch Backward
CtrlApps      = F11 q f ShiftIns   ;QuickSearch clipboard forward
CtrlShiftApps = F11 q b ShiftIns   ;QuickSearch clipboard backward
AltApps       = Clip(5,2) CtrlIns F11 q f ShiftIns                 ;QuickSearch selected forward
AltShiftApps  = Clip(5,2) CtrlIns Editor.Sel(1,0) F11 q b ShiftIns ;QuickSearch selected backward
много комбинаций, ниасилить/низапомнить. у меня в incrsearch:
вперед Alt/ (ассоциация с оперой)
назад Alt. (потому что рядом с предыдущей)
есть еще повторить поиск туда и обратно, но от них хорошо бы избавиться, переложить на повтор обычного поиска, как я уже говорил в самом начале треда.
Centaur wrote:Или ещё вот так. Отдаём первую клавишу после запуска плагина необработанной:

Code: Select all

F11 q f eval(waitkey(0,0))
не понял юзкейс
Фар делают добрые люди

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

Re: QuickSearch — инкрементальный поиск в редакторе

Post by ccaid » Wed 14 Apr, 2010 17:29

HaRT wrote:NoSendKeysToPlugins пробовали?
дважды мутный момент. если снять крестик с ‘send macro to plugins’ в диалоге редактирования макро, то последовательность клавиш не должна посылаться не только в ненужный плагин, но и в нужный. нет? а на практике снятие крестика не влияет ни на что, последовательность доходит до нужного плагина.
Фар делают добрые люди

Ann
Posts: 182
Joined: Tue 26 Jun, 2007 11:05

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Ann » Wed 14 Apr, 2010 17:30

:(
Last edited by Ann on Sun 18 Apr, 2010 21:25, edited 1 time in total.

DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: QuickSearch — инкрементальный поиск в редакторе

Post by DeeZ » Wed 14 Apr, 2010 17:58

Уважаемые, что то перемудрили уже по моему.
все что нужно, как я вижу это:
1. подхватить и вставить патерном выделеный текст.
2. вынести поиск вперед назад в отдельный пункт плагина.
Это решит сразу несколько проблем.
отработав плагин оставит выделение. если мы хотим продолжить - выбираем "найти дальше" (п.2). плагин это выделение подхватит (п.1) и продолжит поиск.


И не большой баг:
в COPYING ищем 13/ (именно слеш). Не находим, но при каждом следующем введенном символе экран дергается, видимо пытаясь продолжить поиск дальше. Может имеем смысл менять позицию в редакторе только если найдено что-то, а не при каждом нажатии (обновлении патерна)?
это оооочень тормозит на больших файлах. сейчас проверил на Словаре Даля (txt 17mb). вводишь слово, и если дальше ничего не найдено, то ждешь на каждую новую букву секунды две.
пишу быстро, по этом при работе с большими файлами может не комфортно подвесить фар. пока поймешь что дальше не найдено..
я все таки за запрет ввдоить следующие буквы, если не найдено.

про то что если поиск начинать с Tab и уже есть выделение - то найденное добавляется к выделению - я подумал это фича. если выделения нет - то блок начинается там где стоял курсор..
А как вообще планировалось это должно работать, если начинать поиск с Tab?

DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: QuickSearch — инкрементальный поиск в редакторе

Post by DeeZ » Wed 14 Apr, 2010 18:14

Centaur wrote:И да, кстати. Как часто мы вообще хотим именно вставлять содержимое буфера в паттерн?
достаточно часто. удобно при редактировании конфигов. Поискать, например, какое значение параметра было в старом конфиге.
Centaur wrote: У меня сложилось впечатление, что обычно мы хотим несколько другого: (а) найти следующее вхождение буфера;
найти вхождение наиболее бОльшей части из буфера в тексте.

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Centaur » Thu 15 Apr, 2010 07:36

ccaid wrote:
Centaur wrote:Или ещё вот так. Отдаём первую клавишу после запуска плагина необработанной:

Code: Select all

F11 q f eval(waitkey(0,0))
не понял юзкейс
Данный макрос позволяет обойти проблему наличия макроса на ShiftIns, при условии, что ShiftIns — первая клавиша, нажимаемая после запуска поиска.
DeeZ wrote:все что нужно, как я вижу это:
1. подхватить и вставить патерном выделеный текст.
2. вынести поиск вперед назад в отдельный пункт плагина.
Это решит сразу несколько проблем.
отработав плагин оставит выделение. если мы хотим продолжить - выбираем "найти дальше" (п.2). плагин это выделение подхватит (п.1) и продолжит поиск.
Если при запуске плагина сразу подставлять в паттерн текущее выделение (я правильно понял п. 1?), то дальнейший набираемый текст будет добавляться к нему. Что приведёт к тому, что будет невозможно искать новый паттерн при выделенном блоке (или придётся добавлять клавишу «очистить паттерн», что мне уже тоже будет неудобно, я хочу, чтобы новый паттерн можно было вводить сразу после запуска плагина независимо от состояния выделения). Или придётся добавить состояние, как unchanged у строк ввода в диалогах, когда вроде бы текст в ней есть, но новый вводимый текст его заменяет.
DeeZ wrote:в COPYING ищем 13/ (именно слеш). Не находим, но при каждом следующем введенном символе экран дергается, видимо пытаясь продолжить поиск дальше. Может имеем смысл менять позицию в редакторе только если найдено что-то, а не при каждом нажатии (обновлении патерна)?
А как мы узнаем, что что-то найдено или не найдено, если не попытаемся найти? А чтобы попытаться найти, надо менять позицию редактора, потому что иначе будет тормозить выборка строки.

Другое дело, что вот тут где-то баг. Ввводим 13 — находим, курсор на последней строке окна. Вводим ещё / — не находим, но окно прокручивается так, что курсор теперь в первой строке окна. И заметно, что при нерезультативном поиске сначала восстанавливается начальная позиция окна, потом новая (с курсором вверху). Вот это надо поправить сначала.
DeeZ wrote:про то что если поиск начинать с Tab и уже есть выделение - то найденное добавляется к выделению - я подумал это фича. если выделения нет - то блок начинается там где стоял курсор..
А как вообще планировалось это должно работать, если начинать поиск с Tab?
Именно так и планировалось. Найти паттерн и передвинуть курсор в конец найденного как будто нажатием Shift+стрелок.

DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: QuickSearch — инкрементальный поиск в редакторе

Post by DeeZ » Thu 15 Apr, 2010 10:17

Centaur wrote: Если при запуске плагина сразу подставлять в паттерн текущее выделение (я правильно понял п. 1?), то дальнейший набираемый текст будет добавляться к нему. Что приведёт к тому, что будет невозможно искать новый паттерн при выделенном блоке (или придётся добавлять клавишу «очистить паттерн», что мне уже тоже будет неудобно, я хочу, чтобы новый паттерн можно было вводить сразу после запуска плагина независимо от состояния выделения). Или придётся добавить состояние, как unchanged у строк ввода в диалогах, когда вроде бы текст в ней есть, но новый вводимый текст его заменяет.
у меня рефлекс жать Ctrl+D, но может тогда имеет смысл сделать как в Inc: если при вызове плагина, курсор стоит на выделенном фрагменте - то подхватить. иначе начать работу с пустым патерном (само выжеление не сбрасывать, а продолжать работу по нынешнему алгоритму. мне очень нравится, что при нажатии Esc старое выделение восстанавливается).
Centaur wrote:А как мы узнаем, что что-то найдено или не найдено, если не попытаемся найти? А чтобы попытаться найти, надо менять позицию редактора, потому что иначе будет тормозить выборка строки.
Другое дело, что вот тут где-то баг. Ввводим 13 — находим, курсор на последней строке окна. Вводим ещё / — не находим, но окно прокручивается так, что курсор теперь в первой строке окна. И заметно, что при нерезультативном поиске сначала восстанавливается начальная позиция окна, потом новая (с курсором вверху). Вот это надо поправить сначала.

Я не программист, советовать ничего не могу, но что то надо с этим сделать.. Автор inc (по твоей ссылке) пишет, что проверял на файлах в половину своей оперативки. мне страшно искать в таких больших файлах, потому что если ничего не найдено - то тормозит все жутко. предлагаю для теста скачать словарь Даля, и попробовать в нем поискать:Даль. Словарь великорусского языка.txt (17Мб)

User avatar
SlashNet
Posts: 591
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 3 times

Re: QuickSearch — инкрементальный поиск в редакторе

Post by SlashNet » Thu 15 Apr, 2010 11:12

Если не сложно, то было бы хорошо добавлять в архив с плагом файлик changelog. А то у меня не так уж и часто интернет есть чтоб посмотреть изменения.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Centaur » Thu 15 Apr, 2010 12:52

DeeZ wrote:если при вызове плагина, курсор стоит на выделенном фрагменте - то подхватить. иначе начать работу с пустым патерном
Я ещё раз повторю: Я нажал клавишу, на которую назначен макрос, вызывающий плагин. Я хочу начать набирать паттерн, и чтобы он сразу искался. А не тратить мыслительные ресурсы на осознание необходимости стереть или не стирать автоподхваченный паттерн.

Что такое «курсор стоит на выделенном фрагменте» — мне неведомо. В моём мире ([ ] persistent blocks) курсор стоит либо в начале блока, либо в конце, либо блок не выделен, либо в каком-то из используемых макросов или плагинов страшный баг.

Вот такой макрос «подхватывает» выделенный блок (if any). Им пользоваться, на мой взгляд, не то чтобы неудобно, а невозможно — потому что за то время, пока я сотру подхваченное, я уже добежал бы стрелками до того места, в которое собираюсь прыгать.

Code: Select all

$If (Selected) Clip(5,2) CtrlIns F11 q f ShiftIns $Else F11 q f $End

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

Re: QuickSearch — инкрементальный поиск в редакторе

Post by HaRT » Thu 15 Apr, 2010 13:04

Centaur wrote:за то время, пока я сотру подхваченное, я уже добежал бы стрелками до того места, в которое собираюсь прыгать.
Так зачем стирать? Ведь такой макрос следует вызывать только тогда, когда именно и требуется подхватить выделение.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Centaur » Thu 15 Apr, 2010 13:21

DeeZ wrote:если ничего не найдено - то тормозит все жутко. предлагаю для теста скачать словарь Даля, и попробовать в нем поискать
Хех, ж…а есть, а слова нет

Короче, регистронезависимость тормозит. Будем оптимизировать…

DeeZ
Posts: 100
Joined: Sat 20 Mar, 2010 18:48

Re: QuickSearch — инкрементальный поиск в редакторе

Post by DeeZ » Thu 15 Apr, 2010 13:30

Centaur wrote:
DeeZ wrote:если при вызове плагина, курсор стоит на выделенном фрагменте - то подхватить. иначе начать работу с пустым патерном
Я ещё раз повторю: Я нажал клавишу, на которую назначен макрос, вызывающий плагин. Я хочу начать набирать паттерн, и чтобы он сразу искался. А не тратить мыслительные ресурсы на осознание необходимости стереть или не стирать автоподхваченный паттерн.
сделай это опцией. кому то может быть полезна такая функция (хотя для меня проблема уже решена макросом).
Centaur wrote:Вот такой макрос «подхватывает» выделенный блок (if any). Им пользоваться, на мой взгляд, не то чтобы неудобно, а невозможно — потому что за то время, пока я сотру подхваченное, я уже добежал бы стрелками до того места, в которое собираюсь прыгать.

Code: Select all

$If (Selected) Clip(5,2) CtrlIns F11 q f ShiftIns $Else F11 q f $End
Мне такое поведение действительно нужно, и полезно. я к нему привык. За макрос спасибо. Его надо чуть чуть доработать, до вставки (перед ShiftIns $Else) переместить курсор в начало выделенного блока, чтобы плагин не искал следующее вхождение, а оставался там где выделенный блок. А то если вхождение единственное или последнее - достаточно не приятный эффект).
результат:

Code: Select all

$If (Selected) Clip(5,2) CtrlIns editor.sel(1,0) F11 q f  ShiftIns $Else F11 q f $End

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Centaur » Thu 15 Apr, 2010 15:10

DeeZ wrote:сделай это опцией. кому то может быть полезна такая функция (хотя для меня проблема уже решена макросом).
Раз проблема решается макросом, усложнять плагин не нужно.

User avatar
Toxa
Posts: 275
Joined: Wed 27 Jul, 2005 14:35
Location: Москва
Contact:

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Toxa » Thu 22 Apr, 2010 10:10

Centaur
Ура! Спасибо! Только сейчас увидел этот плагин. Это — именно то, чего я так долго ждал.

Сразу возникли вопросы. Ветку не читал, поэтому заранее прошу меня простить, если повторю чей-то вопрос.

1. Сразу бросилось в глаза, что если очередной символ не найден, он всё равно вставляется в строку поиска. И когда нажимаешь BS, ожидаешь, что сотрётся предыдущий найденный символ. Например, можно ввести в поиск строку «аааааааааааааааааааааа», хотя в тексте встречается, скажем, только «аа».

2. Если во время работы плагина попытаться поменять направление поиска (ещё раз вызвать плагин, только вместо Search forward выбрать Search backward), плагин напишет: already active, но направление не меняет.

3. Если BS удалить все введённые символы, возвращаемся не к той же позицции, с которой начинали. Если нажимаем ESC, возвращаемся куда надо.

А вообще цены этому плагину нет. Пользуюсь плагином Incrementsl Search постоянно. И вообще инкрементный поиск пользую и в панелях, и в браузерах и вообще везде, где он есть.
Может кому пригодится.

User avatar
Centaur
Posts: 1083
Joined: Tue 05 Apr, 2005 20:09
Location: Novosibirsk, Russia
Been thanked: 1 time

Re: QuickSearch — инкрементальный поиск в редакторе

Post by Centaur » Thu 22 Apr, 2010 10:33

Toxa wrote:1. Сразу бросилось в глаза, что если очередной символ не найден, он всё равно вставляется в строку поиска. И когда нажимаешь BS, ожидаешь, что сотрётся предыдущий найденный символ. Например, можно ввести в поиск строку «аааааааааааааааааааааа», хотя в тексте встречается, скажем, только «аа».
Было уже. Фича. Юзкейс: набираем паттерн; промахиваемся по клавише; замечаем промах, не глядя на экран; инстинктивно жмём BS, ожидаем, что сотрётся ошибочно набранный символ. Если сделать «как везде» — будет так: набираем паттерн; промахиваемся по клавише; замечаем промах, не глядя на экран; инстинктивно жмём BS, вспоминаем, что инкрементальный поиск не такой, как обычный ввод, говорим «б$я», вспоминаем, что у нас там была за последняя буква, восстанавливаем её.

See also быстрый поиск в Firefox’е.
Toxa wrote:2. Если во время работы плагина попытаться поменять направление поиска (ещё раз вызвать плагин, только вместо Search forward выбрать Search backward), плагин напишет: already active, но направление не меняет.
Плагин считает попытку повторного входа за ошибку, за отсутствием полной ясности, как следует поступать. Склоняюсь к тому, чтобы начинать новый поиск с текущей позиции.
Toxa wrote:3. Если BS удалить все введённые символы, возвращаемся не к той же позицции, с которой начинали. Если нажимаем ESC, возвращаемся куда надо.
Баг.

Post Reply

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