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

Здесь обсуждается всё, что касается макросов.
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

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



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


P/S. Данный скрипт интегрируется с моими же скриптами для выбора элемента таблицы (LuaComplete.lua и LuaComplete Tabbed, просмотра таблиц в панельном модуле TablePanel и мой аналог браузера таблиц (мой - TableBrowser, на замену tableview)
Last edited by buniak_a_h on Wed 02 Sep, 2020 11:51, edited 26 times in total.
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

Latest post of the previous page:

John Doe wrote: Tue 05 Sep, 2017 10:33Посмотрел краем уха ваш макрос, и вижу что для поиска ключевых слов в файле вы открываете редактор :facepalm:
  1. Я знаю только ещё один способ поиска в файле: через io.lines. Так я и делаю, если приходится "вытаскивать" индекс (и оглавление) из chm во внешний файл. Но тут есть ограничение: требуется, чтобы был установлен 7-zip; требуется место для распаковки (и вообще не люблю внешних файлов: некоторые мои клиенты напрочь запрещают запись на диск!). Этим способом я пользуюсь, если первоначальный редактор модальный (тогда просто не открыть индекс в редакторе).
  2. Если исходный редактор (из которого вызывается помощь) не модальный, то я для поиска использую плагин arclite, открываю индексы в редакторе и ищу.
Я спрашивал, можно ли плагином arclite "вытащить" файл из архива. Увы, ответа (ну, кроме последовательности клавиш) я не получил. Надо мной даже посмеялись (типа наличие плагина вовсе не означает, что его можно вызвать через CallPlugin). Хотя мне кажется, что это - плохой стиль.
Если знаете другой способ поиска в файле внутри архива и расскажете мне о нём - буду признателен.
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Tue 05 Sep, 2017 10:45Возможно вам проще будет воспользоваться keyhh.
Лично мне - да. Я даже могу сделать маленькую утилитку (увы, на дельфях; просто другого не осталось), ищущую по имени файла и ключевому слову. Просто хотелось сделать всё в макросе. В частности, чтоб не зависеть от версии ОС.
User avatar
bigvax
Posts: 20
Joined: Fri 02 Jun, 2006 17:18
Location: где-то во времени
Has thanked: 1 time
Been thanked: 1 time
Contact:

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

Post by bigvax »

buniak_a_h wrote: Tue 05 Sep, 2017 23:54Я даже могу сделать маленькую утилитку (увы, на дельфях; просто другого не осталось), ищущую по имени файла и ключевому слову. Просто хотелось сделать всё в макросе. В частности, чтоб не зависеть от версии ОС.
Возможно это и правильное решение, не зря-же сам ActiveHelp - имел субплагины для собственно отображения тех или иных форматов.
Т.е. возможен вариант - выхлоп из плагина/макроса одинаковый, а субплагины/модули его уже обрабатывают каждый по своему.
Всегда виртуально Ваш, BigVax
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

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

Post by John Doe »

buniak_a_h wrote: Tue 05 Sep, 2017 23:42через io.lines
Вот и супер.
buniak_a_h wrote: Tue 05 Sep, 2017 23:42требуется место для распаковки
Попробуйте io.popen + 7z с ключом -so
buniak_a_h wrote: Tue 05 Sep, 2017 23:42Я спрашивал, можно ли плагином arclite "вытащить" файл из архива.
Почему бы не создать тикет на мантисе.
buniak_a_h wrote: Tue 05 Sep, 2017 23:42Хотя мне кажется, что это - плохой стиль.
Это не стиль, а отсутствие функциональности.
Кто-то должен её реализовать, прежде чем мы с вами сможем пользоваться.
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Wed 06 Sep, 2017 07:13buniak_a_h писал(а): ↑Ср 06 сен, 2017 01:42
через io.lines
Вот и супер.
И чем это лучше? как я выяснил, даже после нахождения нужной строки цикл надо провести до конца, иначе файл остаётся открытым, а доступа к дескриптору нет (он где-то в недрах io.lines).
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

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

Post by John Doe »

buniak_a_h wrote: Wed 06 Sep, 2017 11:24И чем это лучше?
Позволяет не заботится о временных файлах.
buniak_a_h wrote: Wed 06 Sep, 2017 11:24(он где-то в недрах io.lines).
Вы не разобрались.

P.S.
Если бы я писал такой плагин, то создавал бы для каждого chm свой индекс, чтобы не перечитывать по многу раз.
И поскольку индекс создаётся однократно, то не беспокоился бы о затратах на распаковку файла.
Можно обойтись без 7zip, одним только hh.exe, который есть на каждой системе.
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

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

Post by John Doe »

buniak_a_h wrote: Sat 05 Aug, 2017 05:51при необходимости поменять порядок можно было бы использовать индексы (Object pascal: %2:s -k %1:s; позиционная Visual C++ Printf_p - %2$s -k %1$s), но, насколько я понял, lua их не поддерживает :-(
Функция format не поддерживает, но никто не мешает реализовать это самостоятельно: http://lua-users.org/wiki/StringInterpolation.
Last edited by John Doe on Wed 06 Sep, 2017 13:11, edited 1 time in total.
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Wed 06 Sep, 2017 12:19
buniak_a_h wrote: Wed 06 Sep, 2017 11:24И чем это лучше?
Позволяет не заботится о временных файлах.
Вот как раз временный файл придётся делать и по окончании убивать. Это - если использовать форму io.lines(<имя_файла>). Т.е. нужно же куда-то распаковать файл, чтоб потом в нём искать!
Использование 7z -so я не рассматривал (не изучал я 7z специально) Да и что с этим stdout-ом делать потом? Я не умею перенаправлять вывод внешней программы на вход функции - части макроса ФАРа. Догадываюсь (теперь!), что io.lines() должен быть без параметров. НО! Я каждый такой файл просматриваю трижды. Сможет это организовать io.lines? Или придётся вручную перегонять файл в начало (io.input():seek)?
Будет время - поэкспериментирую.
John Doe wrote: Wed 06 Sep, 2017 12:19
buniak_a_h wrote: Wed 06 Sep, 2017 11:24(он где-то в недрах io.lines).
Вы не разобрались.
Читаю описание io.lines:
io.lines
Открывает файл с данным именем в режиме чтения<...>При обнаружении функцией-итератором конца файла, она возвратит nil (для окончания цикла) и автоматически закроет файл.
Т.е. дескриптор явно внутри функции и наружу не передаётся. Правда, это не относится к вызову без параметров. Видимо, Вы мели в виду именно такой вариант использования: 7z -so , как-то перенаправить вывод на вход ФАРу и вызов io.lines без параметров. Поэкспериментирую ещё.
НО!!! В любом случае даже у нас в офисе далеко не всех установлен 7-zip. Использование необязательных программных средств сторонних разработчиков считаю плохим стилем (недопустимо для анонимно распространяемого софта). Выход был бы если б arclite умел распаковывать (вы рекомендовали в какую-то мантиссу тикет записать). Но (а) в обсуждении плагина таких просьб много; полагаю, там есть и те, кто писал на мантиссу; и (б) для меня мантисса - дробная часть, а тикет - билет. Терминология на этой мантиссе мне совершенно незнакома, разъяснений я не нашёл (впрочем, и не особо искал).
Вообще, в обсуждении arclite хотелки пол-экрана занимают... Смысл добавлять?
А вообще - у Вас авторитет выше, если считаете не лишним - напишите Вы. С Вами быстрее согласятся.
User avatar
HaRT
Moderator
Posts: 9524
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 228 times

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

Post by HaRT »

buniak_a_h wrote: Wed 06 Sep, 2017 23:30в какую-то мантиссу тикет записать
Mantis — это название системы управления запросами на изменение ПО (а попросту — багтрекера), используемой для Фара, — см. ссылку “Bugs” вверху каждой страницы форума (вход туда форумной учёткой).
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 4071
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 5 times
Been thanked: 189 times

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

Post by 2useven10 »

buniak_a_h wrote: Wed 06 Sep, 2017 23:30(б) для меня мантисса - дробная часть, а тикет - билет.
1) с дробной частью тоже мимо кассы.
2) а насчёт билета - хорошее попадание, особенно если вспомнить анекдот о рабиновиче, который хотел 'волгу'
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

HaRT wrote: Wed 06 Sep, 2017 23:53
buniak_a_h wrote: Wed 06 Sep, 2017 23:30в какую-то мантиссу тикет записать
Mantis — это название системы управления запросами на изменение ПО (а попросту — багтрекера), используемой для Фара, — см. ссылку “Bugs” вверху каждой страницы форума (вход туда форумной учёткой).
Я вспомнил, почему не смог ничего туда добавить. Я не нашёл ни слова add, ни слова new в контексте добавления пожелания. И никакого описания, как добавить (слова help я тоже не нашёл). И в FAQ-е форума про мантису тоже нет слов. Может, нынче в институтах и обучают системам управления запросами, но 45 лет назад этого не было точно.
2useven10 wrote: Thu 07 Sep, 2017 00:16 с дробной частью тоже мимо кассы.


А если серьёзно. Похоже, Вы (2useven10) - один из авторов arclite. Если это так, и есть возможность - подумайте над реализацией естественного желания вытащить один файл из архива (из командной строки или через вызовы CallPlugin).
User avatar
HaRT
Moderator
Posts: 9524
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 228 times

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

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2035
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 200 times
Contact:

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

Post by buniak_a_h »

HaRT wrote: Thu 07 Sep, 2017 00:50воспользоваться ссылкой “Report Issue”
Спасибо. Неправильно перевёл. Не "отчёт о проблеме", а "сообщить об ошибке". Кроме этого всё понятно.
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

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

Post by John Doe »

buniak_a_h wrote: Wed 06 Sep, 2017 23:30Это - если использовать форму io.lines(<имя_файла>)
Вот именно, если.
С помощью file:read"*l" можно организовать такой цикл самостоятельно, или вообще прочитать сразу весь файл, и далее работать со строкой.
buniak_a_h wrote: Wed 06 Sep, 2017 23:30Да и что с этим stdout-ом делать потом?
Вы его получите из popen.
buniak_a_h wrote: Wed 06 Sep, 2017 23:30 Я каждый такой файл просматриваю трижды.
Можно и так, хоть и не необязательно.
buniak_a_h wrote: Wed 06 Sep, 2017 23:30В любом случае даже у нас в офисе далеко не всех установлен 7-zip
hh.exe у всех есть.
buniak_a_h wrote: Wed 06 Sep, 2017 23:30Выход был бы если б arclite умел распаковывать
Да.
Shmuel
Posts: 6166
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 329 times

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

Post by Shmuel »

John Doe wrote: Thu 07 Sep, 2017 07:21С помощью file:read"*l" можно организовать такой цикл самостоятельно
Зачем, можно просто использовать file:lines().
User avatar
John Doe
Бюрократ
Posts: 12867
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

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

Post by John Doe »

Действительно)
Post Reply

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