HlfTools — средства работы со справкой

Здесь обсуждается всё, что касается макросов.
Post Reply
User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

HlfTools — средства работы со справкой

Post by John Doe » Tue 12 Sep, 2017 13:34

Набор из нескольких макросов, облегчающих взаимодействие со справкой, и правку hlf-файлов.
Common: • CtrlAltF1 — Повторный вызов справки. При закрытии справки запоминается последний топик, после чего по команде его можно восстановить (независимо от текущего контекста). Клавиатурную комбинацию можно изменить в опциях. Editor • F1 — Отображение текущего редактируемого hlf-файла в виде справки. При наличии, использует функции плагина HlfView. Help • CtrlIns — Копирует в буфер обмена название текущего топика справки. • F4 — Открывает в редакторе текущий топик справки. Если файл уже открыт, то переключается в нужный редактор, и позиционируется к нужному месту. Опционально: закрывает препятствующие переключению модальные окна.

Опции можно изменить в начале скрипта.

А чтобы после каждого обновления не приходилось вручную восстанавливать изменённые значения опций рекомендуется использовать возможности cfgscript из пакета ScriptsBrowser.
Attachments
HlfTools.lua
(6.65 KiB) Downloaded 115 times
Last edited by John Doe on Tue 12 Sep, 2017 13:39, edited 1 time in total.

buniak_a_h
Posts: 897
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 77 times
Been thanked: 28 times
Contact:

HlfTools — средства работы со справкой

Post by buniak_a_h » Sun 18 Aug, 2019 05:28

John Doe, эта тулза полезна написателям hlf-файла (типо проверить, как получилось). Это даже в приведённой справе отмечено. Тут небольшая засада: перед просмотром редактируемый файл необходимо сохранить. В связи с этим рекомендую небольшое «улучшение» скрипта. Суть в том, что если файл изменён, то он сохраняется во временный файл (с BOM), и на него напускается far.ShowHelp. В сообщении привожу только функцию, реализующую action в макросе на F1.
Кроме того, в макросе есть ошибка (в регэкспе, использующемся для поиска имени топика): исключена строка вида @= (что правильно), но НЕ ИСКЛЮЧЕНЫ строки @- и @+ (выключение и включение автоформатирования).
  1. <...>
  2.   action=function()
  3.     local function CurrTopic()
  4.       local topic
  5.       for i=Editor.CurLine,1,-1 do
  6.         local l=Editor.GetStr(i)
  7.         topic = l:match"^@([^=-+%s]+)"
  8.         if topic then break end
  9.       end
  10.       return topic
  11.     end
  12.     local done, EdInfo=false, editor.GetInfo(nil)
  13.     if band(EdInfo.CurState, 1) == 1 then
  14.       -- Файл изменён. Делаю временную копию и показываю её
  15.       local tmp=far.MkTemp('hlf')
  16.       -- Соломка: пытаюсь получить имя файла, которого гарантированно нет
  17.       while mf.fexist(tmp) do
  18.        tmp=far.MkTemp('hlf')
  19.       end
  20.       -- Запись (с BOM)
  21.       local hf=io.open(tmp, 'w')
  22.       if hf then
  23.        if EdInfo.CodePage == 65001 then hf:write('\xEF\xBB\xBF') end -- BOM: ShowHelp почему-то не понимает UTF-8 без BOM
  24.        for i=1,Editor.Lines do
  25.         hf:write(Editor.GetStr(i) .. '\n')
  26.        end
  27.        hf:close()
  28.        done = true
  29.        local topic=CurrTopic()
  30.        far.ShowHelp(tmp,topic,helpflags)
  31.        win.DeleteFile(tmp)
  32.       end
  33.     else -- Файл не изменён.
  34.       local topic=CurrTopic()
  35.       if topic then
  36.         far.ShowHelp(Editor.FileName,topic,helpflags)
  37.         done = true
  38.       end
  39.     end -- Файл изменён
  40.     if not done then
  41.     ------------------Старое {
  42.     if not Plugin.Call("1AF0754D-5020-49cb-9474-1F82691C84C1") then --HlfViewer
  43.       local topic
  44.       local ei = editor.GetInfo()
  45.       for i=ei.CurLine,1,-1 do
  46.         topic = editor.GetString(ei.EditorID,i,3):match"^@([^=%s]+)"
  47.         if topic then break end
  48.       end
  49.       far.ShowHelp(ei.FileName,topic,helpflags)
  50.     end
  51.     end -- if not done
  52.   end;
  53. <...>

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

HlfTools — средства работы со справкой

Post by John Doe » Fri 23 Aug, 2019 10:14

buniak_a_h wrote:
Sun 18 Aug, 2019 05:28
Тут небольшая засада: перед просмотром редактируемый файл необходимо сохранить.
Опишите пожалуйста конкретный сценарий.
Вот я открываю в редакторе файл справки, изменяю, и не сохраняя жму F1 - изменения прекрасно отображаются.

buniak_a_h
Posts: 897
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 77 times
Been thanked: 28 times
Contact:

HlfTools — средства работы со справкой

Post by buniak_a_h » Fri 23 Aug, 2019 10:24

John Doe wrote:
Fri 23 Aug, 2019 10:14
изменяю, и не сохраняя жму F1 - изменения прекрасно отображаются.
Сценарий именно такой. Но у меня отображается именно hlf-файл. Независимо от того, установлен плагин или нет. Надеюсь, поверите на слово - в противном случае я бы не заморачивался .
Я не знаю, как плагин может понять, что hlf надо брать именно из редактора, но функция ShowHelp точно этого знать не может. Ей передаётся имя файла.

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

HlfTools — средства работы со справкой

Post by John Doe » Fri 23 Aug, 2019 11:02

buniak_a_h wrote:
Fri 23 Aug, 2019 10:24
Я не знаю, как плагин может понять, что hlf надо брать именно из редактора, но функция ShowHelp точно этого знать не может.
Задача эта возлагается на штатный плагин HlfViewer:

Code: Select all

Plugin.Call("1AF0754D-5020-49cb-9474-1F82691C84C1") then --HlfViewer
А ShowHelp используется если вызов не удался, и я сходу вот так не вспомню в каких случаях это может быть.
Возможно зависит от настроек плагина:

Code: Select all

╔═══════════════════════ HlfViewer ═══════════════════════╗
║ [ ] Process editor hotkey:   F1                         ║
║ [x] Check by file mask:      *.hlf                      ║
╟─────────────────────────────────────────────────────────╢
║ Show the HLF-file opened in the editor:                 ║
║ ( ) Show last saved file                                ║
║ (•) Show modified file                                  ║
║ ( ) Save and show modified file                         ║
╟─────────────────────────────────────────────────────────╢
║                   { Save } [ Cancel ]                   ║
╚═════════════════════════════════════════════════════════╝
buniak_a_h wrote:
Fri 23 Aug, 2019 10:24
Надеюсь, поверите на слово - в противном случае я бы не заморачивался .
Я верю что у вас не работает, но не уверен что чините в правильном месте.

buniak_a_h
Posts: 897
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 77 times
Been thanked: 28 times
Contact:

HlfTools — средства работы со справкой

Post by buniak_a_h » Fri 23 Aug, 2019 11:22

John Doe wrote:
Fri 23 Aug, 2019 11:02
Возможно зависит от настроек плагина:
Спасибо. Не знал, что у этого плагина есть настройки, и что по умолчанию LastSaved ... Что странно...

User avatar
HaRT
Moderator
Posts: 8945
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 87 times
Been thanked: 155 times

HlfTools — средства работы со справкой

Post by HaRT » Wed 04 Sep, 2019 13:39

Предлагаю для макроса на F1 в редакторе дописать в filemask ещё ;*.hlf.m4 — чтобы можно было пользоваться и при редактировании исходников Фаровской справки.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

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