QSearch plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 1873
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

DV wrote:Пример результатов поиска с контекстом "2 строки до и 2 строки после"
О, шикарно!
А если сроки с найденным находятся рядом, контекст склеется?

Визуализация:

контекст -2
контекст -1
искомое
контекст +1
… снова искомое
контекст +1
контекст +2

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

а если в одной строке? Да и будет ли это очевидно пользователю, который думает если найдено 40 совпадений, а вынесенных блоков 39.

DV
А в меню этот пункт нельзя добавить? А то у меня толком не получается по описанию. Добился вывод в консоль поиск по всем файлам, но лично я 99.999% использую вывод для одного файла. И если в файлах не найдено, то зачем их выводить со строкой "совпадений = 0", проще их не выводить, потому что ищем найденное, ну или выводить список файлов через запятую с одной строкой "совпадений = 0". И вроде речь шла о подсветке, но её пока нет. Я вот делал через генерацию кодера, у меня этот вариант пока работает, пользуюсь месяц или больше, как будто так и должно.
Image

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

AZJIO wrote:И если в файлах не найдено, то зачем их выводить со строкой "совпадений = 0", проще их не выводить
Согласен.
AZJIO wrote:И вроде речь шла о подсветке, но её пока нет
В коде такая возможность есть - при вызове функции scrollEditToPosition нужно параметру bSelectFindText передать TRUE, а не FALSE.
Однако, при таком поведении мне не понравились две вещи:
1) В результатах поиска подсвечиваются _все_ совпадения, а не только те, на которые мы перейдём по double-click. Когда искомый текст встречается в строке несколько раз, это огорчает.
2) Я так и не смог добиться подсветки в панели Log::Output, хотя проделываю с её окном AkelEdit все те же действия, что и в обычной вкладке (при File Output). Тут не помешал бы совет Instructor.

И ещё про Log::Output. Возможность сворачивать результаты поиска в окне Log::Output мне очень нравится, однако при этом активация окна AkelEdit в панели Log::Output отображает панель Coder::CodeFold для показа сворачиваемых узлов (folds). Что не есть хорошо при поиске в обычном текстовом файле, поскольку при каждом double-click в окне Log::Output перед нашими глазами мелькает панель Coder::CodeFold. Тут определённо требуется экспертиза от Instructor.

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

DV
подсвечиваются _все_ совпадения
не так страшно, по сравнению с отсутствием подсветки, а тем более прыжок к найденному поставит курсор в нужное место. В идеале бы подсветить искомое одним цветом, а те же совпадения в этой же строке другим цветом, чтобы понятно было, что в строке 3 совпадения, но позиция совпадения на таком-то. Подсвечивать по позициям? Есть такое? По крайней мере в RichEdit можно выделить по позициям и подсветить выделенное. Если строка для выделения та же, то искать в ней позиции первого искомого, потом второго искомого. Либо сначала подсветить всё, потом искать в результатах повторение строк и при их наличии переподсвечивать вторичные другим цветом, потому что как я понимаю подсвечивание через выделение может тормозить вывод, даже если отключить перерисовку.
Я так и не смог добиться подсветки в панели Log::Output, хотя проделываю с её окном AkelEdit все те же действия
так как это окно не является вкладкой, то для него поддержка аналогов функций прописывается наверно индивидуально, поэтому к нему не применяется весь набор как к вкладке изначально. Может к Call("Coder::HighLight", 2, "#RRGGBB", "#RRGGBB", FLAGS, FONTSTYLE, ID, "TEXT", TEXTLENGTH) надо добавить флаг определяющий "основное окно" и "окно консоли" (во FLAGS), а внутри как я понимаю всё определяется дескриптором. Или функцию GetOutputWindow, которая возвращает дескриптор консоли из описания Log-Rus.txt сделать чтобы Call("Coder::HighLight", 2... учитывал дескриптор назначенный через AkelPad.SetEditWnd(hWndOutput).

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Версия на пробу (QSearch-dev-200223.zip):
https://github.com/d0vgan/AkelPad-Plugs ... dev-200223
Пользуемся, конфигурируем, делимся впечатлениями...

P.S.
Пояснения некоторых ограничений:

1. Ручной параметр 'logoutput_frp_highlight' не поддерживает значения 2 (QSFRH_IFCHECKED) и 3 (QSFRH_ALWAYS).
Причина: мне не удалось добиться работоспособности этих параметров (т.е. подсветки заданного текста) в окне Log::Output.
Нужна помощь Instructor.

2. Файл "Plugs\Coder\qsfndall_tolog.coder" содержит закомментированные строки в секции Folds.
Причина: мне не удалось избавиться от мелькания панели Coder::CodeFold при двойном клике в окне Log::Output. Это актуально, когда поиск был произведён в простом текстовом файле (для которого не отображается панель Coder::CodeFold) и когда в окне Log::Output есть сворачиваемые блоки (при раскомментированной секции Folds в файле "Plugs\Coder\qsfndall_tolog.coder").
Нужна помощь Instructor.

Offline
Posts: 276
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

DV
QSearch-dev-200223 на AkelPad 4.9.9 x64 (Win 8.1 x64)
При включенной опции Output: Filter Mode и попытке вывести результат в панель Log или в отдельный таб, стабильный краш AkelPad.
Image

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

DV
в документации "QSearch-Rus.txt"/"QSearch-Eng.txt" из пункта 38 (бывший 36) исчезло описание флага "512", но пример использования:
38) findall_result = 816
подразумевает его наличие.

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Версия на пробу (QSearch-dev-200225.zip), с исправлениями:
https://github.com/d0vgan/AkelPad-Plugs ... dev-200225

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Думаю, что это уже Release Candidate:
https://github.com/d0vgan/AkelPad-Plugs ... dev-200311

Основное отличие от предыдущей версии только в том, что дата обновлена на Март 2020.

Также экспериментировал с использованием регулярных выражений в секции Folds файла Coder\qsfndall_tofile.coder. Однако, при поиске в лог-файле размером около 100 МБ и при 50 тыс. найденных вхождений использование регулярок в Folds затормаживает показ результатов. (В моих экспериментах на отображение результатов поиска уходило примерно 20 секунд при использовании регулярных выражений - и 12 секунд без них. Тогда как в Log::Output, для которого секция Folds сейчас пуста, отображение результатов поиска заняло порядка 3 секунд.).

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

DV
если взять среднестатистического пользователя и среднестатистические файлы то 0,1-1 Мб. И в крайнем случае наверно можно добавить флаг, который определяет наличие рег.выр. в Folds.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

AZJIO
1.
если взять среднестатистического пользователя и среднестатистические файлы то 0,1-1 Мб.
Позвольте поинтересоваться, какими статистическими данными/справочниками вы здесь оперируете?
2.
И в крайнем случае наверно можно добавить флаг, который определяет наличие рег.выр. в Folds.
ЕМНИП вы даже делали собственные coder-файлы. А если так, то странно, как вы могли не заметить, что "флаг, который определяет наличие..." уже есть (точнее даже два): 1048576 и 2097152

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

opk44
какими статистическими данными/справочниками вы здесь оперируете?
Опытом. Любой программист при написании кода разделяют программу по функционалу, создаёт свой заголовочный файл для вынесения туда универсальных функций и код в 1 Мб это очень большой код. Сейчас проверил свой сборник 2000 скриптов au3, собранный с разных сайтов и самый большой файл в нём заголовочный 822 кб, четвёртый в списке файл уже 255 кб, 27-й уже 100 кб, 300-й 20 кб, 740-й - 5 кб и это ещё не середина списка.
Возьмём веб дизайнеров, у них страница загружаемая обычно до 1 Мб причём она может подгружать код с разных серверов, то есть скелет страницы ещё меньше. С руборда есть "Версия для печати", там 300 страниц можно скачать одним файлом 10 Мб, но одна страница в среднем 10000кб/300стр = примерно 30кб.
Для тек кто пишет записки вообще молчу, там 100кб предел. Если книга то библия у меня умещалась в 2 Мб, а там очень много страниц, больше 1000. Обычные книги до 1 Мб. Файлы 100 Мб это какой нибудь лог или текстовая база данных, типа обращение к серверу клиентов или какие нибудь данные координаты перемещения объекта по карте. Но как я уже сказал можно сделать флаг, к тому же этот случай для поиска в результатах поиска, потому что данные в 150 тысяч результатов глазами никто просматривать не будет, так как это случай либо проверки наличия или проверки количества найденных, но ни как не вывод для просмотра.
"флаг, который определяет наличие..." уже есть (точнее даже два): 1048576 и 2097152
программа из временного файла формирует кодер и флаг нужен для вставки в генерируемый кодер флагов 1048576 и 2097152, а точнее самой строки для свёрток регулярным выражением, иначе эта строка там не появляется.
То есть даже флаг по умолчанию желательный вывод в свёртках.

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

QSearch v.7.5
* изменено: результаты поиска ("Найти все") отображаются в более удобном виде
+ добавлено: синтаксические файлы "qsfndall_*.coder" для плагина Coder
+ добавлено: двойной клик в окне (вкладке) с результатами поиска переходит к
найденной строке
+ добавлено: 'select_by_fnd', 'select_by_selfnd'
+ добавлено: 'logoutput_frp_highlight'
* изменено: Ctrl+Tab в панели QSearch посылается окну редактирования AkelPad
- исправлено: "Подсветить все" могло не работать при поиске со спец. символами
- исправлено: QSFRM_CHARINLINE и QSFRM_LINE не поддерживали перенесенные строки


https://github.com/d0vgan/AkelPad-Plugs ... es/tag/v75

Offline
Posts: 348
Joined: Mon Jun 03, 2019 2:33 am

Post by AZJIO »

DV
Плаг не запоминает состояние. Я в основном пользуюсь другим способом поиска, скриптом, но ранее для теста попробовал и QSearch, но отталкивает то, что при закрытии плага он при перезапске AkelPad на следующий день панель уже запускается сама, и каждый раз приходится её закрывать, а потом уже не хочешь пробовать, потому что придётся лезть в плагины и отключать активность там в списке, потом перезапускать AkelPad чтобы сохранился потому что я ещё бывает выключаю винду принудительно с убийством прог и естественно настройка не сохраняется. а было бы удобно если закрыл, то открыть можно через меню и состояние запоминалось.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

AZJIO wrote:DV
Плаг не запоминает состояние...
Так это со всеми плагинами так. Разве вам не очевидно, что настройка запускать/не запускать плагин - ответственность редактора, а не конкретного плагина?
А на всякий случай ещё раз напомню разницу между Call(плагин) и +Call(плагин) для ToolBar/ContextMenu:
Call() -- метод вызывает плагин...
+Call() -- метод вызывает плагин... Плагин также будет работать после перезагрузки программы.
Post Reply