QSearch plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

algeriano wrote:Guys, tell me how to configure that when you open a text file, the default focus is always in the search bar?
QSearch does not propose such ability since editing, in my opinion, has higher priority than searching when we are talking about a text editor (not viewer). Anyway, the user Deelite wrote he somehow succeeded to get such behavior - but I can't believe it. If he did achieve that, then it looks like a "buggy feature" because such behavior was not added intentionally :)
QSearch, however, proposes a wide range of additional options that allow delicate tuning of the behavior. The details are in "AkelFiles\Docs\QSearch-Eng.txt". In particular, when both "Window: Editor auto-focus" and "Window: QSearch auto-focus" are checked, a simple move of the mouse cursor switches the focus between AkelPad's editing window and QSearch'es search field.

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Well, can always can try write resident script hooked to AKDN_OPENDOCUMENT_FINISH where we will try activate QSearch, but I doubt it will be reliable and userfriendly even for people who request this functionality.

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

Post by DV »

algeriano wrote:Guys, tell me how to configure that when you open a text file, the default focus is always in the search bar?
This can be achieved with the following script:

Code: Select all

var hWndMain = AkelPad.GetMainWnd();
var oSys = AkelPad.SystemFunction();

var AKD_JS_QSEARCH_FOCUS = 0x7ABC; // unique message (must not be equal to any existing AKD_* message)
var AKD_JS_SCRIPT_STOP   = 0x7CCC; // unique message (must not be equal to any existing AKD_* message)
var UNIQUE_QS_ID         = 0x1A2BC71E; // unique wParam id to identify _this_ script file

AkelPad.ScriptNoMutex();

var mutexName = "QSearchAutoFocus_js_" + hWndMain;
var hMutex;
if (hMutex = oSys.Call("kernel32::CreateMutex" + _TCHAR, 0, 1, mutexName))
{
  if (oSys.GetLastError() == 183 /*ERROR_ALREADY_EXISTS*/)
  {
    oSys.Call("kernel32::CloseHandle", hMutex);
    oSys.Call("user32::PostMessage" + _TCHAR, hWndMain, AKD_JS_SCRIPT_STOP, UNIQUE_QS_ID, 0);
    WScript.Quit();
  }
}

var hMainSubClass;
if (hMainSubClass = AkelPad.WindowSubClass(1 /*WSC_MAINPROC*/, MainCallback))
{
  AkelPad.WindowGetMessage(); //Message loop

  AkelPad.WindowUnsubClass(1 /*WSC_MAINPROC*/);
}

function MainCallback(hWnd, uMsg, wParam, lParam)
{
  if (uMsg == 0x436 /*AKDN_OPENDOCUMENT_FINISH*/
   || uMsg == 0x416 /*AKDN_FRAME_ACTIVATE*/)
  {
    AkelPad.WindowNextProc(hMainSubClass, hWnd, uMsg, wParam, lParam); // default processing
    oSys.Call("user32::PostMessage" + _TCHAR, hWnd, AKD_JS_QSEARCH_FOCUS, UNIQUE_QS_ID, 0);
    AkelPad.WindowNoNextProc(hMainSubClass); // skip it
  }
  else if (uMsg == AKD_JS_QSEARCH_FOCUS && wParam == UNIQUE_QS_ID)
  {
    if (AkelPad.IsPluginRunning("QSearch::QSearch"))
    {
      AkelPad.Call("QSearch::QSearch"); // hides QSearch when "hotkey_hides_panel" is "1"
    }
    AkelPad.Call("QSearch::QSearch");
    AkelPad.SendMessage(hWndMain, 0x0111 /*WM_COMMAND*/, 0, 0); // "empty" command to update the Toolbar
  }
  else if (uMsg == AKD_JS_SCRIPT_STOP && wParam == UNIQUE_QS_ID)
  {
    oSys.Call("user32::PostQuitMessage", 0); // exit the message loop 
  }

  return 0;
}

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

Post by DV »

DV wrote:"QSearchAutoFocus.js"
Можно было бы встроить это прямо в QSearch - например, как одну из ручных настроек.

Также замечено, что при установленной галочке "Подсветить все" при поиске с регулярными выражениями галочка "Слово целиком" не имеет эффекта.
Похоже, что при подсветке флаг "Слово целиком" игнорируется, когда он используется одновременно с регулярными выражениями.
В любом случае, это можно исправить средствами QSearch, явным образом обрамляя искомую строку парой \b в случае регулярных выражений + "Слово целиком".

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

Post by DV »

DV wrote:Можно было бы встроить это прямо в QSearch
OK.
DV wrote:это можно исправить средствами QSearch
OK.

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

Post by DV »

QSearch v.7.1
+ исправлено: галочка "Слово целиком" не оказывала эффект на "Подсветить все" при поиске с регулярными выражениями
+ новая настройка: "Авто-фокус в QSearch (при откр. файла)"
* мелкие улучшения

P.S.
Уже идёт разработка следующей версии плагина. Там будет кое-что интересное.

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

Post by DV »

В общем, парни и девчонки, такая вот задумка:
Image

Тут один умник писал, что поиск в другом потоке не нужен.
Так вот, при поиске слова "soft" в лог-файле размером в 9 МБ (созданного каким-то установщиком) без фонового потока весь AkelPad зависает на несколько минут (!). Отличный подход к дизайну!
Так что я ещё буду допиливать поиск в фоновом потоке, ну и вообще. Это я пока только сырой прототип показал. Ну и, для отчётности, только на эти сырые изменения уже ушло 16 часов разработки.

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

Post by yozhic »

DV
QSearch.ini history_save=4. Не сохраняет историю. Ни в реестре, ни в ini...

Offline
Posts: 17
Joined: Thu May 03, 2018 2:14 am

Post by icijian »

yozhic wrote:DV
QSearch.ini history_save=4. Не сохраняет историю. Ни в реестре, ни в ini...
The new version has this problem Old version is normal!

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

Post by DV »

У меня большие сомнения, что значение

Code: Select all

history_save=4
когда-либо что-либо сохраняло.

Как написано в справке:
history_save = 3
Может быть установлено в 0 или быть суммой следующих значений:
0 - (...) не сохраняется
1 - (...) история поиска сохраняется
2 - (...) "Учитывать регистр" и "Слово целиком" сохраняется
4 - (...) сохранять не в Системном Реестре
Ключевой момент: быть суммой следующих значений.

Значение 4 само по себе - єто только признак того, что "сохранять не в Системном Реестре, а там, куда сохраняет настройки AkelPad (например, в .ini файл)"
Однако, какие же настройки сохранять?
Значение 4 является суммой 4+0, а не суммой 4+1+2 или 4+1 или 4+2.
0 - история поиска и состояние галочек не сохраняется.

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

Post by opk44 »

4 - (...) сохранять не в Системном Реестре
Может тогда порядок слов поменять на "не сохранять в Системном Реестре"?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

opk44 wrote:Может тогда порядок слов поменять на "не сохранять в Системном Реестре"?
Тогда получится неправильно: флаг 4 не запрещает хранить в реестре, а заставляет плагин использовать то же, что использует сам AkelPad.

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

Post by yozhic »

DV
Да, прошу прощения, невнимательно прочел справку :oops: Вчера вечером уже и сам разобрался, но не было возможности исправить свой пост. Зато теперь есть подробная инструкция для торопыг :)

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

Post by DV »

Что-то я затормозился с разработкой... Сначала нашел несколько неподалок, требующих разбирательства под глубокой отладкой, потом много задач по работе навалилось, теперь вот приболел еще...
Я, пожалуй, создам проект "AkelPad-QSearch" на GitHub - и буду там вікладівать по мере разработки версии для тестирования.

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

Post by yozhic »

DV
Только напишите там, пожалуйста, как его собирать. Чтобы чайники тоже могли принять участие. От чайников толк иногда тоже бывает :)
Post Reply