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

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

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

Post by John Doe »

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

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

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



raw | zip
Last edited by John Doe on Tue 12 Sep, 2017 13:39, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post 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. <...>
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Sun 18 Aug, 2019 05:28 Тут небольшая засада: перед просмотром редактируемый файл необходимо сохранить.
Опишите пожалуйста конкретный сценарий.
Вот я открываю в редакторе файл справки, изменяю, и не сохраняя жму F1 - изменения прекрасно отображаются.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Fri 23 Aug, 2019 10:14 изменяю, и не сохраняя жму F1 - изменения прекрасно отображаются.
Сценарий именно такой. Но у меня отображается именно hlf-файл. Независимо от того, установлен плагин или нет. Надеюсь, поверите на слово - в противном случае я бы не заморачивался .
Я не знаю, как плагин может понять, что hlf надо брать именно из редактора, но функция ShowHelp точно этого знать не может. Ей передаётся имя файла.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post 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 Надеюсь, поверите на слово - в противном случае я бы не заморачивался .
Я верю что у вас не работает, но не уверен что чините в правильном месте.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Fri 23 Aug, 2019 11:02 Возможно зависит от настроек плагина:
Спасибо. Не знал, что у этого плагина есть настройки, и что по умолчанию LastSaved ... Что странно...
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Предлагаю для макроса на F1 в редакторе дописать в filemask ещё ;*.hlf.m4 — чтобы можно было пользоваться и при редактировании исходников Фаровской справки.
Фар есть инструмент, а не нянька. © 2009 DrKnS
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

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

Post by LAT »

Имхо, было бы удобнее:
1. Запоминать топик не автоматически последний, а по выбору пользователя
2. Помнить (хранить?) не 1 топик, а все выбранные (с возможностью удаления уже ненужных)
3. При запуске предлагать выбор из меню сохраненных топиков
Это позволило бы формировать избранные топики, которые часто требуются, и быстро переходить в них (аналог закладок в браузерах).
Но, насколько я понимаю, все упирается в п.1: невозможно отловить нажатия клавиш в HlfViewer, чтобы формировать список избранного. :(
Last edited by LAT on Fri 17 Jan, 2020 12:53, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Можно было бы вести подобие истории, куда по умолчанию попадали бы закрытые топики.
Как и в обычной истории, можно реализовать там выбор избранных.
Ну и возможность добавления произвольного топика (по хоткею).
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

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

Post by LAT »

Посмотрел на все внимательнее. Обнаружил, что ошибался насчет "невозможно отловить нажатия клавиш в HlfViewer, чтобы формировать список избранного".

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

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

Как было бы удобно (имхо). Бегает пользователь по помощи, находит какой-то интересный ему топик (часто используемый, или перспективный для изучения, или важный для текущих задач, или…), сохраняет в избранных (лучше даже, с каким-то комментарием - для чего он добавил топик в избранные). Затем не ищет этот топик заново, а выбирает сразу из списка избранного.
Last edited by LAT on Fri 17 Jan, 2020 13:25, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Я считаю, что не надо изобретать велосипед. Если и делать Историю и Избранное — то примерно как в веб-браузерах.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

LAT wrote: Fri 17 Jan, 2020 12:52 или просто находиться в этом топике (это как раз то, что я предлагал)?
Для этого надо вывести на экран историю и нажать Ins.
HaRT wrote: Fri 17 Jan, 2020 13:12 Я считаю, что не надо изобретать велосипед. Если и делать Историю и Избранное — то примерно как в веб-браузерах.
У нас есть истории фара.
LAT
Posts: 343
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 22 times
Been thanked: 39 times

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

Post by LAT »

John Doe wrote: Fri 17 Jan, 2020 08:11Можно было бы вести подобие истории, куда по умолчанию попадали бы закрытые топики.
John Doe wrote: Fri 17 Jan, 2020 13:41Для этого надо вывести на экран историю и нажать Ins.
Тогда получится, что вначале нужно выйти, причем строго из нужного топика, только затем, чтобы этот топик попал в историю, только затем, чтобы поместить его в избранное. А если еще сразу забыл пометить избранным – искать его среди [возможно, длинного] списка. Мне кажется, что более удобный способ работы: сидишь листаешь помощь, нашел интересный топик, добавил в избранное (с необязательным описанием, зачем добавлял) и бегаешь по топикам дальше. А история тут вообще не нужна – ну какая разница, в каких топиках находишься, когда нажимаешь Esc?
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

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

Если что, я имел в виду логическую организацию Истории и Избранного, а также пользовательские сценарии.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

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