Page 3 of 3

Posted: Sun Jun 21, 2020 3:22 pm
by AZJIO
Обновил плаг Help, добавив имитирование клавиши Ctrl+F, вставку слово чтобы в итоге подсветить текст на странице. Попробуйте флаг 11 (увеличение стандартного флага на 10, чтобы активизировать Ctrl+F).
Мне не удалось по нормальному авктивировать окно веб-старницы (переместить фокус в правую часть окна), это не работает:

Code: Select all

PostMessage_(hWnd_Find, #WM_SETFOCUS, 0, 0)
PostMessage_(hWnd_Find, #WM_APP, 0, 0)
пришлось имитировать клавишей F6, при этом недостаток, надо свернуть справку, чтобы следующий вызов с Ctrl+F сработал.

Posted: Thu Dec 03, 2020 1:05 am
by AZJIO
Как получить имя используемого *.coder?
При открытии справки возникла проблема, что на одно расширение файла cfg могут быть привязаны разные файлы справки например Grub2 и Syslinux. Остаётся внести критерий "имя кодера".

Эти вызовы сделать программно:

Code: Select all

Call("Coder::Settings", 16, WINDOW, *SYNTAXFILE, SYNTAXFILELENGTH)
Call("Coder::Settings", 18, WINDOW, DOCUMENT, *ALIAS, *ALIASLENGTH)

Posted: Thu Dec 03, 2020 10:54 pm
by DV
AZJIO wrote:Как получить имя используемого *.coder?
См. пример получения ALIAS в функции getCoderAliasW из https://github.com/d0vgan/AkelPad-Plugs ... earchDlg.c
Ф-ция getCoderAliasW заполняет строку (технически - буфер, переданный через указатель) pszAliasBufW в результате вызова ф-ции CallCoderSettings, которая, в свою очередь, вызывает "Coder::Settings".
Ф-ция getCoderAliasW для своей работы использует явно объявленную структуру DLLECCODERSETTINGS_GETALIAS, которая соответствует передаче параметров через стек.

Posted: Sat Dec 05, 2020 11:27 am
by AZJIO
Вот переконвертировал, но вместо псевдонима кодера возвращает имя текущего файла-документа, то есть вообще не кодера. До кучи проверил 16 (имя файла кодера) вместо 18 (псевдонима кодера), с 16 ничего не возвращает.

Code: Select all

Structure DLLECCODERSETTINGS_GETALIAS Align #PB_Structure_AlignC
	dwStructSize.i ; размер структуры
	nAction.i ; номер действия
	hWndEdit.i		  ; окно редактирования
	hDoc.i
	*pszAlias;
EndStructure

Procedure Get_ALIAS(*pd.PLUGINDATA)
	Protected stParams.DLLECCODERSETTINGS_GETALIAS
	Protected pcsW.PLUGINCALLSENDW
	Protected pszAliasBufW.s
	pszAliasBufW = Space(256)
	
	; If Not *pd\bOldWindows
		stParams\dwStructSize = SizeOf(DLLECCODERSETTINGS_GETALIAS)
		; stParams\nAction = #DLLA_CODER_GETALIAS
		stParams\nAction = 18
		; stParams\hWndEdit = #NUL
		stParams\hWndEdit = *pd\hWndEdit
		; stParams\hDoc = #NUL
		stParams\hDoc = *pd\hDocEdit
		stParams\pszAlias = @pszAliasBufW

		; GUI_Coder_Alias_Call(@stParams)
		pcsW\pFunction = @"Coder::Settings"
		pcsW\lParam = stParams
		pcsW\dwSupport = 0

		SendMessage_(*pd\hMainWnd, #AKD_DLLCALLW, 0, @pcsW)
; 	MessageRequester("Alias", pszAliasBufW)
	MessageRequester("Alias", PeekS(stParams\pszAlias, -1, #PB_Unicode))
EndProcedure


В общем из того что я понял, всё правильно, код видимо возвращает имя файла из которого можно взять расширение. То есть псевдоним может быть как сам файл, так и расширение, например для Grub2 указывается grub.cfg.
Поискал среди файлов исходников *.h|*.c текст DLLEXTCODERGETALIAS и DLLEXTCODERGET в надежде найти DLLEXTCODERGETSYNTAXFILE, не удалось. Также нашёл структуру SYNTAXFILE с полем wszSyntaxFileName, но непонятно как получить адрес на эту структуру. Также попытался гепотетически составить структуру аналогичную DLLEXTCODERGETALIAS но без поля hDoc, непроканало.

Posted: Sat Dec 12, 2020 2:02 pm
by VladSh

Posted: Thu Dec 17, 2020 4:31 am
by AZJIO
VladSh
С .js понятно, там Scripts.dll сделает программную обёртку.

Кстати, посмотрел "Visual Studio Code", там понравилась функция истории документов с поиском. Интересен стал плаг типа History, как в браузере "Журнал". То есть любой файл открытый отправляется в конец некой базы-списка открытых файлов. Пользователь мог бы выбрать поиск по имени файла, и кнопка настроек, допустим удалить дубликаты, удалить старые, удалить несуществующие пути. Сама идея найти документ не роясь по папкам, потому что помнишь как его называл, помнишь, что открывал, а значит идея мгновенного доступа имеет смысл. Те же кодеры или скрипты можно найти мгновенно, не открывая папку, а к примеру ввёл "t.co" и он уже выдаст txt.coder, причём других вариантов скорее всего не будет.
Чтобы написать плагин нужно перехватывать событие открытия файлов, а в остальном стандартная работа со списком, и можно было бы использовать даже готовый движок CommandPalette.js.

Posted: Thu Dec 17, 2020 8:36 am
by DV
AZJIO wrote:понравилась функция истории документов с поиском.
Это прямо описание плагина AltHistory для FAR Manager: этот плагин поддерживает фильтрацию в историях просмотра/редактирования и папок, и поддерживает до 100 000 элементов в этих историях.
Поражаюсь, что для Total Commander до сих пор ничего такого не сделали.

Posted: Thu Dec 17, 2020 11:08 am
by opk44
DV wrote:...AltHistory для FAR ... поддерживает до 100 000 элементов...
О как! :shock:

... Передаём для наших радиослушателей песню группы Nightlands "So Far So Long"...

Posted: Thu Dec 17, 2020 5:23 pm
by VladSh
Для поиска в истории можно было бы просто усовершенствовать плаг RecentFiles, если бы у кого знаний, времени и желания хватило...