Page 1 of 2

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

Posted: Tue 12 Sep, 2017 13:34
by John Doe
Набор из нескольких макросов, облегчающих взаимодействие со справкой, и правку hlf-файлов.
Common: • CtrlAltF1 — Повторный вызов справки. При закрытии справки запоминается последний топик, после чего по команде его можно восстановить (независимо от текущего контекста). Клавиатурную комбинацию можно изменить в опциях. Editor • F1 — Отображение текущего редактируемого hlf-файла в виде справки. При наличии, использует функции плагина HlfView. Help • CtrlIns — Копирует в буфер обмена название текущего топика справки. • F4 — Открывает в редакторе текущий топик справки. Если файл уже открыт, то переключается в нужный редактор, и позиционируется к нужному месту. Опционально: закрывает препятствующие переключению модальные окна. • BS, AltF1 — Стандартное действие (переход к предыдущую страницу) закрывает справку в случае если уже открыта начальная страница. Макросы из данного набора опционально предотвращают закрытие справки. • AltI — Открывает @Index или @Contents.

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

А чтобы после каждого обновления не приходилось вручную восстанавливать изменённые значения опций рекомендуется использовать возможности cfgscript из пакета ScriptsBrowser.



raw | zip

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

Posted: Sun 18 Aug, 2019 05:28
by buniak_a_h
John Doe, эта тулза полезна написателям hlf-файла (типо проверить, как получилось). Это даже в приведённой справе отмечено. Тут небольшая засада: перед просмотром редактируемый файл необходимо сохранить. В связи с этим рекомендую небольшое «улучшение» скрипта. Суть в том, что если файл изменён, то он сохраняется во временный файл (с BOM), и на него напускается far.ShowHelp. В сообщении привожу только функцию, реализующую action в макросе на F1.
Кроме того, в макросе есть ошибка (в регэкспе, использующемся для поиска имени топика): исключена строка вида @= (что правильно), но НЕ ИСКЛЮЧЕНЫ строки @- и @+ (выключение и включение автоформатирования).
  1. <...>
  2.  
  3.   action=function()
  4.  
  5.     local function CurrTopic()
  6.  
  7.       local topic
  8.  
  9.       for i=Editor.CurLine,1,-1 do
  10.  
  11.         local l=Editor.GetStr(i)
  12.  
  13.         topic = l:match"^@([^=-+%s]+)"
  14.  
  15.         if topic then break end
  16.  
  17.       end
  18.  
  19.       return topic
  20.  
  21.     end
  22.  
  23.     local done, EdInfo=false, editor.GetInfo(nil)
  24.  
  25.     if band(EdInfo.CurState, 1) == 1 then
  26.  
  27.       -- Файл изменён. Делаю временную копию и показываю её
  28.  
  29.       local tmp=far.MkTemp('hlf')
  30.  
  31.       -- Соломка: пытаюсь получить имя файла, которого гарантированно нет
  32.  
  33.       while mf.fexist(tmp) do
  34.  
  35.        tmp=far.MkTemp('hlf')
  36.  
  37.       end
  38.  
  39.       -- Запись (с BOM)
  40.  
  41.       local hf=io.open(tmp, 'w')
  42.  
  43.       if hf then
  44.  
  45.        if EdInfo.CodePage == 65001 then hf:write('\xEF\xBB\xBF') end -- BOM: ShowHelp почему-то не понимает UTF-8 без BOM
  46.  
  47.        for i=1,Editor.Lines do
  48.  
  49.         hf:write(Editor.GetStr(i) .. '\n')
  50.  
  51.        end
  52.  
  53.        hf:close()
  54.  
  55.        done = true
  56.  
  57.        local topic=CurrTopic()
  58.  
  59.        far.ShowHelp(tmp,topic,helpflags)
  60.  
  61.        win.DeleteFile(tmp)
  62.  
  63.       end
  64.  
  65.     else -- Файл не изменён.
  66.  
  67.       local topic=CurrTopic()
  68.  
  69.       if topic then
  70.  
  71.         far.ShowHelp(Editor.FileName,topic,helpflags)
  72.  
  73.         done = true
  74.  
  75.       end
  76.  
  77.     end -- Файл изменён
  78.  
  79.     if not done then
  80.  
  81.     ------------------Старое {
  82.  
  83.     if not Plugin.Call("1AF0754D-5020-49cb-9474-1F82691C84C1") then --HlfViewer
  84.  
  85.       local topic
  86.  
  87.       local ei = editor.GetInfo()
  88.  
  89.       for i=ei.CurLine,1,-1 do
  90.  
  91.         topic = editor.GetString(ei.EditorID,i,3):match"^@([^=%s]+)"
  92.  
  93.         if topic then break end
  94.  
  95.       end
  96.  
  97.       far.ShowHelp(ei.FileName,topic,helpflags)
  98.  
  99.     end
  100.  
  101.     end -- if not done
  102.  
  103.   end;
  104.  
  105. <...>

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

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

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

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

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

Posted: Fri 23 Aug, 2019 11:02
by John Doe
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 Надеюсь, поверите на слово - в противном случае я бы не заморачивался .
Я верю что у вас не работает, но не уверен что чините в правильном месте.

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

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

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

Posted: Wed 04 Sep, 2019 13:39
by HaRT
Предлагаю для макроса на F1 в редакторе дописать в filemask ещё ;*.hlf.m4 — чтобы можно было пользоваться и при редактировании исходников Фаровской справки.

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

Posted: Thu 16 Jan, 2020 19:57
by LAT
Имхо, было бы удобнее:
1. Запоминать топик не автоматически последний, а по выбору пользователя
2. Помнить (хранить?) не 1 топик, а все выбранные (с возможностью удаления уже ненужных)
3. При запуске предлагать выбор из меню сохраненных топиков
Это позволило бы формировать избранные топики, которые часто требуются, и быстро переходить в них (аналог закладок в браузерах).
Но, насколько я понимаю, все упирается в п.1: невозможно отловить нажатия клавиш в HlfViewer, чтобы формировать список избранного. :(

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

Posted: Fri 17 Jan, 2020 08:11
by John Doe
Можно было бы вести подобие истории, куда по умолчанию попадали бы закрытые топики.
Как и в обычной истории, можно реализовать там выбор избранных.
Ну и возможность добавления произвольного топика (по хоткею).

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

Posted: Fri 17 Jan, 2020 12:52
by LAT
Посмотрел на все внимательнее. Обнаружил, что ошибался насчет "невозможно отловить нажатия клавиш в HlfViewer, чтобы формировать список избранного".

Как сейчас. Можно сохранить только 1 топик. Но для этого нужно закрыть помощь, находясь строго в этом топике.

Комментарии о поводу предыдущего поста.
John Doe wrote: Fri 17 Jan, 2020 08:11Можно было бы вести подобие истории, куда по умолчанию попадали бы закрытые топики.
Как и в обычной истории, можно реализовать там выбор избранных.
При интенсивном чтении помощи такой список может оказаться внушительным. Искать по нему, что нужно бы сделать избранным, вряд ли будет приятным занятием.
John Doe wrote: Fri 17 Jan, 2020 08:11Ну и возможность добавления произвольного топика (по хоткею).
Имеется в виду, что для этого нужно помнить название топика, или просто находиться в этом топике (это как раз то, что я предлагал)?

Как было бы удобно (имхо). Бегает пользователь по помощи, находит какой-то интересный ему топик (часто используемый, или перспективный для изучения, или важный для текущих задач, или…), сохраняет в избранных (лучше даже, с каким-то комментарием - для чего он добавил топик в избранные). Затем не ищет этот топик заново, а выбирает сразу из списка избранного.

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

Posted: Fri 17 Jan, 2020 13:12
by HaRT
Я считаю, что не надо изобретать велосипед. Если и делать Историю и Избранное — то примерно как в веб-браузерах.

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

Posted: Fri 17 Jan, 2020 13:41
by John Doe
LAT wrote: Fri 17 Jan, 2020 12:52 или просто находиться в этом топике (это как раз то, что я предлагал)?
Для этого надо вывести на экран историю и нажать Ins.
HaRT wrote: Fri 17 Jan, 2020 13:12 Я считаю, что не надо изобретать велосипед. Если и делать Историю и Избранное — то примерно как в веб-браузерах.
У нас есть истории фара.

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

Posted: Fri 17 Jan, 2020 14:30
by LAT
John Doe wrote: Fri 17 Jan, 2020 08:11Можно было бы вести подобие истории, куда по умолчанию попадали бы закрытые топики.
John Doe wrote: Fri 17 Jan, 2020 13:41Для этого надо вывести на экран историю и нажать Ins.
Тогда получится, что вначале нужно выйти, причем строго из нужного топика, только затем, чтобы этот топик попал в историю, только затем, чтобы поместить его в избранное. А если еще сразу забыл пометить избранным – искать его среди [возможно, длинного] списка. Мне кажется, что более удобный способ работы: сидишь листаешь помощь, нашел интересный топик, добавил в избранное (с необязательным описанием, зачем добавлял) и бегаешь по топикам дальше. А история тут вообще не нужна – ну какая разница, в каких топиках находишься, когда нажимаешь Esc?

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

Posted: Fri 17 Jan, 2020 14:47
by HaRT
John Doe wrote: Fri 17 Jan, 2020 13:41 У нас есть истории фара.
И какое это имеет отношение к истории просмотров разных страниц справки Фара, плагинов и скриптов?

Если что, я имел в виду логическую организацию Истории и Избранного, а также пользовательские сценарии.

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

Posted: Fri 17 Jan, 2020 15:44
by John Doe
LAT wrote: Fri 17 Jan, 2020 14:30 Тогда получится, что вначале нужно выйти
Если будет список, то полагаю никаких проблем не будет его вызвать не выходя.
HaRT wrote: Fri 17 Jan, 2020 14:47 И какое это имеет отношение к истории просмотров разных страниц справки Фара, плагинов и скриптов?
Есть привычный (в фаре) интерфейс, поэтому резонно следовать образцу, а не изобретать своё.