Макрос, реализующий функции плагина Active-Help

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by buniak_a_h »

Был хороший плагин active-Help, который перестал работать на 64-разрядной версии. Я всех его возможностей не помню, использовал только запуск отмеченного текста как команды ShellExecute и вызов помощи по языку программирования (*.hlp, *.chm). Постарался сделать его заменитель на макро (Lua)



Active-Help.1_13_5.7z
Версия 1.13.5
(15.64 KiB) Downloaded 87 times
settings.cfg.7z
Примерная настройка для получения справки по функциям ФАР-макросов, LuaFAR и т.п.
(499 Bytes) Downloaded 97 times


P/S. Данный скрипт интегрируется с моими же скриптами для выбора элемента таблицы (LuaComplete.lua и LuaComplete Tabbed, просмотра таблиц в панельном модуле TablePanel и мой аналог браузера таблиц (мой - TableBrowser, на замену tableview)
Last edited by buniak_a_h on Thu 08 Oct, 2020 05:12, edited 27 times in total.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Макрос, реализующий функции плагина Acvtive-Help

Post by Shmuel »

Неплохо бы прилагать к сообщению файл(ы) макроса (архив zip или 7z). Некоторые пользователи не любят ковыряться с копи-пастой.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Макрос, реализующий функции плагина Acvtive-Help

Post by buniak_a_h »

Shmuel wrote: Sat 05 Aug, 2017 07:35Неплохо бы прилагать к сообщению файл(ы) макроса (архив zip или 7z). Некоторые пользователи не любят ковыряться с копи-пастой.
  1. Думал, так удобнее анализировать для критики. Когда (и если) макрос признают полезным и перенесут в раздел "полезные макросы", я бы это сделал.
  2. Когда-то в Codebox-ах была возможность скачивания. Что-то я теперь не вижу...
Я там нагородил с сохранением-восстановлением настроек... Как читать данные типа FST_DATA - я пример нашёл. А как сохранять - увы, нет. Наверняка есть более короткий способ сохранить таблицу, чем перебирать все значения; надеялся, что знатоки мне подскажут, как это делается короче.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

Макрос, реализующий функции плагина Acvtive-Help

Post by Shmuel »

buniak_a_h wrote: Sat 05 Aug, 2017 11:39Когда (и если) макрос признают полезным
Это признание - весьма субъективно, не стоит обращать на это внимание.
buniak_a_h wrote: Sat 05 Aug, 2017 11:39Наверняка есть более короткий способ сохранить таблицу, чем перебирать все значения
Есть функции mf.mload и mf.msave - они весьма простые и интуитивные в использовании.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Макрос, реализующий функции плагина Acvtive-Help

Post by buniak_a_h »

Shmuel wrote: Sat 05 Aug, 2017 11:46Есть функции mf.mload и mf.msave - они весьма простые и интуитивные в использовании.
Описание функции в "энцилопедии":
E=mload(S) Считать из базы значение глобальной переменной с именем S (область Vars).
Ну и пример далее какой-то дикий, из первого ФАРа... :wacko:
Описание из macroapi_manual.ru.chm:
ret = mf.mload (key, name [, location])
Какому верить?
Если первому, то можно ли сохранять таким способом локальные переменные? Правильно ли я понял, что "глобальные" - это те, что входят в таблицу _G?
Если второму, то что означают строковые параметры key и name? Почему для хранения одной переменной требуется две строки? Что-то типа имени секции и имени параметра?
---
Что-то у меня с интуицией плоховато.
Last edited by buniak_a_h on Sat 05 Aug, 2017 12:59, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макрос, реализующий функции плагина Acvtive-Help

Post by John Doe »

buniak_a_h wrote: Sat 05 Aug, 2017 12:56Какому верить?
macroapi_manual.
Написано же красным по белому: http://api.farmanager.com/ru/macro/index.html
buniak_a_h wrote: Sat 05 Aug, 2017 12:56Правильно ли я понял, что "глобальные" - это те, что входят в таблицу _G?
В Энциклопедии этот раздел не читайте.
buniak_a_h wrote: Sat 05 Aug, 2017 12:56Если первому, то можно ли сохранять таким способом локальные переменные?
Можно сохранить таблицу значений.
buniak_a_h wrote: Sat 05 Aug, 2017 12:56что означают строковые параметры key и name?
Адрес в базе, куда вы хотите сохранить.
"key" может содержать множество значений с разными "name".
Например key="buniak_a_h"; name="Acvtive-Help" (кстати опечатка в заголовке)
User avatar
bigvax
Posts: 28
Joined: Fri 02 Jun, 2006 17:18
Location: где-то во времени
Has thanked: 3 times
Been thanked: 1 time
Contact:

Макрос, реализующий функции плагина Active-Help

Post by bigvax »

Здраствуете.
У меня макрос почему-то «дерется» с плагином LuaMacro.
Вот такое выскакивает при старте Far'а.
╔═══════════════════════════════════════════════════════ LuaMacro ═════════════════════════════════════════════════════════════ ║ C:\Program Files\Far\Profile\Macros\scripts\Active-Help.lua:143: attempt to index local 'S1' (a nil value) stack traceback: ║ ║ C:\Program Files\Far\Profile\Macros\scripts\Active-Help.lua:143: in function 'MergeSettings' ║ ║ C:\Program Files\Far\Profile\Macros\scripts\Active-Help.lua:148: in main chunk ║ ║ [ C]: in function 'xpcall' ║ ║ C:\Program Files\Far\Plugins\LuaMacro\utils.lua:711: in function <C:\Program Files\Far\Plugins\LuaMacro\utils.lua:691> ║ ║ [ C]: in function 'RecursiveSearch' ║ ║ C:\Program Files\Far\Plugins\LuaMacro\utils.lua:780: in function <C:\Program Files\Far\Plugins\LuaMacro\utils.lua:622> ║ ╟──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╢ ║ { OK } [ Edit ] ║ ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
Last edited by bigvax on Mon 04 Sep, 2017 23:47, edited 3 times in total.
Всегда виртуально Ваш, BigVax
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

Макрос, реализующий функции плагина Active-Help

Post by HaRT »

 ! Message from: HaRT
bigvax, отредактируйте, пожалуйста, своё сообщение, заключив всё сообщение об ошибке в тэг ascii (над полем ввода комментария есть соответствующая кнопка).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by buniak_a_h »

bigvax wrote: Mon 04 Sep, 2017 23:31У меня макрос почему-то «дерется» с плагином LuaMacro.
Спасибо. Была ошибка, проявлявшаяся при отсутствии сохранённых настроек. Исправлено. Новая версия в первом топике.
User avatar
bigvax
Posts: 28
Joined: Fri 02 Jun, 2006 17:18
Location: где-то во времени
Has thanked: 3 times
Been thanked: 1 time
Contact:

Макрос, реализующий функции плагина Active-Help

Post by bigvax »

buniak_a_h wrote: Tue 05 Sep, 2017 01:37 Спасибо. Была ошибка, проявлявшаяся при отсутствии сохранённых настроек.
Тебе спасибо, что так быстро исправил. ;)

А скажи, плиз, что прописывать в настройках поле «Алиас файла помощи»?
А то я что-то туплю.

Например настраиваю вызов помощи для PHP - для начала хочу попробовать все по дефолту:
- пп.1-3 - настройки клавиш: не трогаю
- в маски файлов: *.php, *.phtml
- Файл помощи: D:\blah-blah\php_enanced_ru.chm
- «Алиас...», «Команда...», «Параметры...» - тоже пока не трогаю.
- Сохраняю

В файле .php при курсоре на топике и нажатии CtrlF1 - ничего не происходит
при выделении топика + CtrlF1 - открывается этот самый php_enanced_ru.chm, но не в разделе топика а на странице ошибки:



Т.е. нет поиска по файлу .chm


При добавлении в настройках в раздел команды: hh - Все аналогично
Возможно, я просто что-то не догоняю, и неправильно настраиваю... :(

И еще, можно-ли сделать как в АН - что-бы помощь открывалась не только при выделении топика, но и просто при курсоре на топике (типа ловля слова под курсором)

И еще - сколько раз ни нажимаешь CtrlF1, столько запускается копий файла помощи (.chm), соответственно через какое-то время у тебя висит куча открытых копий одного файла помощи.
Возможно стоит проверять, что файл уже открыт, и производить новый поиск в нем.

Заранее благодарен.
Last edited by bigvax on Tue 05 Sep, 2017 03:26, edited 2 times in total.
Всегда виртуально Ваш, BigVax
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by buniak_a_h »

bigvax wrote: Tue 05 Sep, 2017 02:43А скажи, плиз, что прописывать в настройках поле «Алиас файла помощи»?
Если для одного файла указано несколько файлов помощи, то можно для каждого написать нечто типа "читабельного" алиаса. Например, "Помощь по языку", "Краткий список тегов" и т.п. . При вызове справки именно эти алиасы будут присутствовать в меню.
bigvax wrote: Tue 05 Sep, 2017 02:43при выделении топика
Там в условие макроса я написал, чтобы он срабатывал только при наличии выделения. И именно выделенный кусок ищется. Можно было бы сделать поиск слова над курсором, но это - если будет кому-нить надо.
bigvax wrote: Tue 05 Sep, 2017 02:43Т.е. нет поиска по файлу .chm
На самом деле я делал поиск "методом тыка", проверял на ФАРовской энциклопедии (на всех файлах, поставляемых с ФАРом) и ещё на паре CHM. И я не уверен, что такое работает всегда. Посему у меня к Вам просьба: пришлите мне, пожалуйста (если не секретно) CHM-файл, на котором не работает, и укажите что Вы ищете. В личку. Или даже лучше на почту: в личных сообщениях у них очень строгое ограничение на размер вложения. Адрес моей почты я напишу Вам в личку.
bigvax wrote: Tue 05 Sep, 2017 02:43И еще, можно-ли сделать как в АН - что-бы помощь открывалась не только при выделении топика, но и просто при курсоре на топике (типа ловля слова под курсором)
Ну, попозже...
bigvax wrote: Tue 05 Sep, 2017 02:43Возможно стоит проверять, что файл уже открыт, и производить новый поиск в нем.
Увы, я не умею из lua определять, закрыто ли приложение, вызванное ранее. А писать нечто на "серьёзном" языке программирования - это уже действительно плагин, я не писал. И хотя не боги горшки обжигают, но на это надо время, а у меня завал. Так что пока проще закрывать хелпы.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by John Doe »

buniak_a_h wrote: Tue 05 Sep, 2017 09:36Увы, я не умею из lua определять, закрыто ли приложение, вызванное ранее. А писать нечто на "серьёзном" языке программирования - это уже действительно плагин, я не писал. И хотя не боги горшки обжигают, но на это надо время, а у меня завал. Так что пока проще закрывать хелпы.
Когда-то я начинал писать подобный плагин, и вот такой черновик нашёл сейчас на диске.

Code: Select all

local ffi = require("ffi")
local HH = ffi.load"hhctrl.ocx"
local C = ffi.C

ffi.cdef[[
//http://msdn.microsoft.com/library/ms670172
HWND HtmlHelpW(
  HWND    hwndCaller,
  LPCTSTR pszFile, //Att!!
  UINT    uCommand,
  DWORD   dwData);
]]

local HH_ = {
  DISPLAY_TOPIC=0x0000,
  DISPLAY_TOC=0x0001,
  DISPLAY_INDEX=0x0002,
  DISPLAY_SEARCH=0x0003,
  KEYWORD_LOOKUP=0x000D,
  DISPLAY_TEXT_POPUP=0x000E,
  HELP_CONTEXT=0x000F,
  CLOSE_ALL=0x0012,
  ALINK_LOOKUP=0x0013,
  GET_LAST_ERROR=0x0014,
}

local wsize = ffi.sizeof"wchar_t"
local function _w(str)
  local len = str:len()
  str = win.Utf8ToUtf16(str)
  local buffer = ffi.new("wchar_t[?]",len+1)
  ffi.copy(buffer,str,len*wsize)
  return buffer
end
Использовать так:

Code: Select all

local chmfile = [[C:\apps\far3\Encyclopedia\FarEncyclopedia.ru.chm]]
HH.HtmlHelpW(nil,_w(chmfile),HH_.DISPLAY_TOPIC,0) --https://msdn.microsoft.com/ru-ru/library/ms670084

-- поиск в индексе:
local keywords = "$Continue"
HH.HtmlHelpW(nil,_w(chmfile),HH_.DISPLAY_INDEX,ffi.cast("DWORD",_w(keywords)))
Аналогичным образом можно делать всё остальное, описанное на MSDN (к сожалению самое интересно всё равно не будет работать, баги в апи..)
Last edited by John Doe on Sat 16 Sep, 2017 16:55, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by John Doe »

Посмотрел краем уха ваш макрос, и вижу что для поиска ключевых слов в файле вы открываете редактор :facepalm:
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by John Doe »

John Doe wrote: Tue 05 Sep, 2017 10:27Это только черновик, он определённо не доделан..
Возможно вам проще будет воспользоваться keyhh.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

Макрос, реализующий функции плагина Active-Help

Post by buniak_a_h »

John Doe wrote: Tue 05 Sep, 2017 10:33Посмотрел краем уха ваш макрос, и вижу что для поиска ключевых слов в файле вы открываете редактор :facepalm:
  1. Я знаю только ещё один способ поиска в файле: через io.lines. Так я и делаю, если приходится "вытаскивать" индекс (и оглавление) из chm во внешний файл. Но тут есть ограничение: требуется, чтобы был установлен 7-zip; требуется место для распаковки (и вообще не люблю внешних файлов: некоторые мои клиенты напрочь запрещают запись на диск!). Этим способом я пользуюсь, если первоначальный редактор модальный (тогда просто не открыть индекс в редакторе).
  2. Если исходный редактор (из которого вызывается помощь) не модальный, то я для поиска использую плагин arclite, открываю индексы в редакторе и ищу.
Я спрашивал, можно ли плагином arclite "вытащить" файл из архива. Увы, ответа (ну, кроме последовательности клавиш) я не получил. Надо мной даже посмеялись (типа наличие плагина вовсе не означает, что его можно вызвать через CallPlugin). Хотя мне кажется, что это - плохой стиль.
Если знаете другой способ поиска в файле внутри архива и расскажете мне о нём - буду признателен.
Post Reply

Return to “Обсуждение макросов”