QSearch plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

DV

"лелеять надежду" и "глубокая печаль" - крайне опасные движения души; первая ведёт к прелести, а вторая - к унынию и далее к неверию.
Безотносительно к АкелПаду)


Может с API, конечно, всё так печально... я использовал:

Code: Select all

result = AkelPad.GetTextRange(0, nMax);
Добавлено: а, ну да, это ж я брал из всего текста, а не из выделения...
А нет ли возможности определить позицию начала выделения и от неё взять сколько-то?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV
Может так?

Code: Select all

#define IDC_COMBOBOXEDIT       1001
...
        case DLGTYPE_FIND:
        case DLGTYPE_REPLACE:
            if ( bModelessDlgIsFocused || !bQSearchDlgIsFocused )
            {
                HWND hFindTextWnd = GetDlgItem(hModelessDlg, IDC_SEARCH_FIND);
                HWND hFindTextEditWnd = GetDlgItem(hFindTextWnd, IDC_COMBOBOXEDIT);
                if (SendMessage(hFindTextEditWnd, EM_GETMODIFY, 0, 0))
                    bSetText = TRUE;
...

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

Post by DV »

В этом случае EM_GETMODIFY всё время 0 возвращает. Под Windows 7.
Похоже, таки надо текст сравнивать. Но такой подход меня не воодушевляет.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV
Проверил - возвращает 1, если текст изменен:

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var hModelessDlg=AkelPad.SendMessage(hMainWnd, 1275 /*AKD_GETMODELESS*/, 0, 0);
var hFindTextWnd=oSys.Call("user32::GetDlgItem", hModelessDlg, 3052 /*IDC_SEARCH_FIND*/);
var hFindTextEditWnd=oSys.Call("user32::GetDlgItem", hFindTextWnd, 1001 /*IDC_COMBOBOXEDIT*/);
WScript.Echo("" + AkelPad.SendMessage(hFindTextEditWnd, 0x00B8 /*EM_GETMODIFY*/, 0, 0));

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

Post by DV »

QSearch v.6.3
+ При активном DialogSwitcher нажатие Ctrl+F и Crtl+H в главном окне
редактирования позволяет подхватить выделенный в этом окне текст.
(В то время как нажатие Ctrl+F и Crtl+H в диалоге поиска/замены
оставляет в диалоге тот текст, который был.)
* AkelPad 4.9.6+
* восьмая годовщина QSearch :)


- при вызове или переключении на диалог поиска/замены из окна редактирования плагин QSearch педантично вычитывает либо весь, либо первые 16384 (подсмотрено в AkelEdit) символов выделенного текста из окна редактирования;
- затем вычитывает столько же символов из диалога поиска/замены;
- затем не менее педантично сравнивает их посимвольно.
Если все символы совпадают - значит, диалог поиска/замены уже подхватил выделенный в редакторе текст. Если же они не совпадают, то берётся предыдущий текст, который был в предыдущем диалоге поиска/замены или панели QSearch.

Offline
Posts: 19
Joined: Sun Jan 17, 2016 5:41 pm

Post by nbsp »

When searching for ".+" ("Search: Use regular expressions" is selected), the search is non-greedy and finds only 1 character, similar to the non-greedy version ".+?". Only the possessive version ".++" performs greedy search.

Searching ".+" ("Regular expressions" checked) using the "Find..." dialog does perform a greedy search as expected.

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

Post by DV »

nbsp wrote:When searching for ".+" ("Search: Use regular expressions" is selected), the search is non-greedy and finds only 1 character
Indeed, this is intentional. The motivation:
QSearch-Eng.txt wrote:v.5.4 (May 2013)
* now the search ignores "+", "*", "+?" and "*?" at the end of regexp to avoid selection to the end of the file
The purpose of "avoid selection to the end of the file" is highly noticeable in the on-the-fly mode, when + or * appears in the middle of the RegEx being typed.
As you mentioned, ++ or *+ can be used to make it greedy explicitly.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

DV wrote: As you mentioned, ++ or *+ can be used to make it greedy explicitly.
Дело в том, что по описанию:
QSearch-Rus.txt wrote: Поиск с регулярными выражениями. Используется реализация регулярных
выражений в AkelPad.
А в AP, шаблон ".+", находит совпадение полностью со всем текстом.
В QSearch же совпадение будет только с одним символом, т.е. по сути, аналог шаблона ".+?". При этом, если использовать более расширенный шаблон, например, ".+." или "(.+)", то будет выбран именно весь текст, т.е. всё таки "+", в данном случае, является жадным квантификатором.
Тут надо, либо описание подкорректировать, либо работу регэкспов привести в соответствие... а вообще, имхо, не совсем понятно, зачем программно игнорировать квантификаторы в конце регэкспов?! Пусть себе выделяют то, что в шаблоне прописывает пользователь - если есть необходимость исключения выделения всего текста, надо просто составить соответствующий шаблон...

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

Post by DV »

QSearch v.6.5
+ added: 'adj_incompl_regexp'
This manual option controls whether "incomplete" regular expression is adjusted or not. Refer to QSearch-Eng.txt for details.

Offline
Posts: 19
Joined: Sun Jan 17, 2016 5:41 pm

Post by nbsp »

When searching for the following regex:

Code: Select all

(?<=").+?\K\b\\\b
it seams that the QSearch plugin always uses the option ". matches \n", although it is not set in the AkelPad Find dialog.

That is, the QSearch plugin matches both the cyan colored "\" (in line 4) and the red colored "\" (in line 7). The Find dialog without the ". matches \n" option set finds only the red colored "\". Is it possible to control whether that option is set or not in QSearch (a checkbox menu option, perhaps)?
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{9BE31822-FDAD-461B-AD51-BE1D1C159921}\ProgID]
@="VideoLAN.VLCPlugin.2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{9BE31822-FDAD-461B-AD51-BE1D1C159921}\Programmable]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{9BE31822-FDAD-461B-AD51-BE1D1C159921}\ToolboxBitmap32]
@="D:\\_programs\\TC UP 6.7\\Plugins\\Media\\VLC\App\\VLC\\axvlc.dll,1"

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

Post by DV »

nbsp wrote:the option ". matches \n"
I've just recently noticed this option in AkelPad's Find Dialog, and I also thought it would be good to add this in QSearch.
What I don't know, though, is how to call this option in QSearch? It looks like one of "Search: ..." options, but it relates only to regular expressions...

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

Post by DV »

nbsp wrote:the option ". matches \n"
Собственно, да: не могу подобрать ни название этому пункту меню, ни место, куда его вставить во всплывающее меню.

Такой вариант:

Code: Select all

Поиск: Использовать регулярные выражения
Поиск: . совпадает с \n в рег. выражениях
Поиск: Подхватывать выделенный текст
выглядит как-то нескладно: строка насчёт \n слишком длинная, да и плохо вписывается.

Такой вариант:

Code: Select all

Поиск: Останавливаться в конце файла
RegExp: . совпадает с \n
Окно: Расположить сверху
тоже как-то не очень...

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

DV
А если так:

Code: Select all

Поиск: Использовать регулярные выражения
Поиск: . захватывает переводы строк
Логичнее рядом с регулярными выражениями, как мне кажется.

И если не выбраны регулярные выражения – отключать этот пункт.
Last edited by Infocatcher on Tue Mar 29, 2016 7:37 am, edited 2 times in total.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

DV wrote:
nbsp wrote:the option ". matches \n"
Собственно, да: не могу подобрать ни название этому пункту меню
...
А зачем изобретать? Можно глянуть как это уже сделано:
eng: ". matches \n"
rus: ". захватывает \n"

Image

или:

Image
Last edited by YuS on Tue Mar 29, 2016 7:43 am, edited 1 time in total.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Кстати, если честно, я бы и во встроенном диалоге поиска заменил бы. :D
Вот у меня файл с \r\n (или \r), а все равно захватывает.
Post Reply