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

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

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

Post by John Doe »

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

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

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

buniak_a_h
Posts: 1865
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 118 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

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: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 288 times

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

Post by John Doe »

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

buniak_a_h
Posts: 1865
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 118 times
Been thanked: 165 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: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 288 times

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
Надеюсь, поверите на слово - в противном случае я бы не заморачивался .
Я верю что у вас не работает, но не уверен что чините в правильном месте.

buniak_a_h
Posts: 1865
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 118 times
Been thanked: 165 times
Contact:

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

Post by buniak_a_h »

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

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

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

Post by HaRT »

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

LAT
Posts: 314
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 34 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: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 288 times

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

Post by John Doe »

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

LAT
Posts: 314
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 34 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: 9424
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 219 times

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

Post by HaRT »

Я считаю, что не надо изобретать велосипед. Если и делать Историю и Избранное — то примерно как в веб-браузерах.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by John Doe »

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

LAT
Posts: 314
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 19 times
Been thanked: 34 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: 9424
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 219 times

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

Post by HaRT »

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

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

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

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 “Обсуждение макросов”