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

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

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



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


P/S. Данный скрипт интегрируется с моими же скриптами для выбора элемента таблицы (LuaComplete.lua и LuaComplete Tabbed, просмотра таблиц в панельном модуле TablePanel и мой аналог браузера таблиц (мой - TableBrowser, на замену tableview)
Last edited by buniak_a_h on Thu 08 Oct, 2020 05:12, edited 27 times 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:

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

Post by buniak_a_h »

Latest post of the previous page:

John Doe wrote: Mon 11 Sep, 2017 11:11Почему бы не сделать путь настраиваемым, хотя бы константой в макросе.
Неохота было возиться. Сделаю... Хотя главного ограничения не отменяет: он ДОЛЖЕН БЫТЬ! А разместить его в каталог, входящий в PATH - возможно, даже проще, чем менять скрипт.
John Doe wrote: Mon 11 Sep, 2017 11:11Файлы в поставке фара с каждым ночным билдом с новой датой, хотя по факту меняются редко.
А при чём тут файлы в поставке ФАРа? chm-файлы не только в ФАРе поставляются... Даже к старой Delphi некоторые компонены поставляются с такими файлами помощи и до сих пор меняются... А с ФАРовскими - ну, значит, будут перестраиваться индексы. У ФАРа они маленькие, на древней 15-летней машине индексируются меньше секунды. Не сохранять же КС (CRC32 или ещё что)! Проверка CRC будет происходить дольше, чем перестроение индекса. Да и софт искать... Точнее, софт есть, но его ещё надо приспособить для использования в скрипте.
John Doe wrote: Mon 11 Sep, 2017 11:11Подход оправдан когда у вас есть отлаженный модуль, функции которого реально используются в нескольких скриптах, и/или сами по себе могут быть полезны другим пользователям.
За других не скажу, а у меня эти процедуры используются много где. Просто надоело копипастить - выделил в модуль. Ну, правда, процедура TabQuickToString - новая; раньше таблиц такого размера у меня не бывало.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 12:39Выше я прокомментировал описание обновления, а теперь глянул код, и вот за что зацепился взгляд:
Спасибо за разбор. Собственно, для этого и присылал.
John Doe wrote: Mon 11 Sep, 2017 12:39 1. Функция TableClone есть и в модуле, и в макросе
Ну да, я ж писал (тоже где-то выше): надоело копипастить. Забыл убрать.
John Doe wrote: Mon 11 Sep, 2017 12:39 2. Встретил использование mf.env, mf.index, mf.substr, mf.fexist, mf.ucase, mf.lcase, и т.п. Рекомендую ознакомиться с темой Лишние функции macro api
Про некоторые я в курсе. Но в то же время некоторые вызовы функций из mf выглядят компактнее и логичнее. Особенно это касается функций mf.substr и mf.index
John Doe wrote: Mon 11 Sep, 2017 12:39 3. В своей функции FindFile вы повторяете библиотечную win.SearchPath
Спасибо. Не хватает всё же нормального описания языка и библиотек (в т.ч. "специфических для FAR), объединённых в одном документе (лучше всего - pdf). Чтоб можно было читать всё подряд, а не получать справку по конкретной функции. Надо ещё знать о её существовании...
John Doe wrote: Mon 11 Sep, 2017 12:39 4. Функция _FileExt тоже идёт своим путём, хотя есть mf.split, или же чисто lua: str:match"%.([^\\]+)$" or ""
За mf.split - спасибо. А насчёт str;match: (а) я именно её и использую и (б) сначала так и написал. Что-то не срослось. То ли при наличии точки в имени каталога, то ли при отсутствии полного пути вообще. Пришлось сделать if, в котором как раз та самая str:match.
John Doe wrote: Mon 11 Sep, 2017 12:39 5. В ANSItoUTF_8 вместо числовой константы лучше использовать win.GetACP
А GetUTF8CP нету? Для замены 65001 . Если нет - то и замене смысла нет. Если есть - я не нашёл.
P.S. На самом деле явно не хватает функций перекодировки (особенно в UTF-8, на котором работает LuaFAR, но который на практике встречается довольно редко). Типа EncodeUTF8String ... OemToUtf8 нашёл (сейчас только). А AnsiToUtf8 - не нашёл. Ощущение такое, что как разработчикам самим понадобится функция - они делали. А AnsiToUtf8 им было без надобности...
John Doe wrote: Mon 11 Sep, 2017 12:39 6. Функцию capital можно написать так str:lower():gsub("^%l", unicode.utf8.upper)
Ничего не понял, но спасибо. Таблицы unicode не встречал ни в текстах других авторов, ни в документации - откуда знать? А так - да, запись короче. Хотя и непонятней...
John Doe wrote: Mon 11 Sep, 2017 12:39 7. Чтение hhc/hhk на lua уже привёл постом выше.
8. _ValidKey можно заменить far.NameToRecordTable
Ну, опять спасибо. И опять камень в огород авторов документации. Откуда я мог знать о существовании этой функции?
John Doe wrote: Mon 11 Sep, 2017 12:39 9. Многострочные литералы удобнее <...>
Видимо, кто к чему привык... Мне моё читабельнее.
John Doe wrote: Mon 11 Sep, 2017 12:39 10. Непропорционально много кода для организации диалогов.
Вот тут я согласен. Следующим постом опишу проблемы, с которыми столкнулся при написании диалогов (в т.ч. и полное отсутствие некоторых моментов в доументации. Хотя, может, я просто не нашёл).
Last edited by buniak_a_h on Mon 11 Sep, 2017 14:08, 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:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 12:3910. Непропорционально много кода для организации диалогов.
Возможно, я многого в организации диалогов не понимаю. Ну и на некоторые "странности" напоролся:
1. Если в элементе DI_LISTBOX указать текст с акселератором (например, "&4. Настройка файлов помощи") то перехода на листбокс всё равно не происходит.
2. Если фокус ввода стоит на листбоксе, то перейти из него клавишами-акселераторами на другой элемент тоже не получается.
3. Если движение по диалогу стрелками Up/Down приводит в листбокс, то после оттуда уже не выйти (только табуляцией). Согласитесь, неудобно.
4. Не нашёл возможности присвоить кнопкам шоткаты (было бы здорово!)
Пришлось эти функции реализовывать вручную. Возможно, всё давно решено...
Про флаги (в виде текста) в документации вообще не нашёл! Ну, как один сделать - я понял. Но перечисление флагов в виде таблицы - согласитесь, нетривиально!
Last edited by buniak_a_h on Mon 11 Sep, 2017 14:25, 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:

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

Post by John Doe »

buniak_a_h wrote: Mon 11 Sep, 2017 14:06надоело копипастить
Как по мне, то для нужд данного скрипта ни эта, ни прочие функции модуля не нужны.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06Но в то же время некоторые вызовы функций из mf выглядят компактнее и логичнее. Особенно это касается функций mf.substr и mf.index
Лишь до тех пор, пока не привыкнете к lua.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06Пришлось сделать if, в котором как раз та самая str:match.
В данном случае я не функцию вам указываю, а на то, что операция простая, и будучи записана вот так получается компактнее и нагляднее (чем в каком-то дереве условий).
А mf.split я например не использую, по соображениям указанным выше.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06А GetUTF8CP нету? Для замены 65001 . Если нет - то и замене смысла нет. Если есть - я не нашёл.
65001 это в любом случае постоянное значение, в отличии от ANSI, значение которой не всегда 1251.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06Ощущение такое, что как разработчикам самим понадобится функция - они делали.
Обычный подход.
А функцию вы себе написали.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06Ничего не понял, но спасибо.
Мануал по lua поможет.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06Таблицы unicode не встречал ни в текстах других авторов, ни в документации - откуда знать?
Selene Unicode, в luafar_manual.chm
buniak_a_h wrote: Mon 11 Sep, 2017 14:06А так - да, запись короче. Хотя и непонятней...
Это одна из идиом lua, непонятны они только если не пытаться ими пользоваться.
buniak_a_h wrote: Mon 11 Sep, 2017 14:06 Откуда я мог знать о существовании этой функции?
В документации она есть.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 11 Sep, 2017 14:06Следующим постом опишу проблемы, с которыми столкнулся при написании диалогов
Тонкостей может быть и много, но зачем вообще идти по сложному пути.

Достаточно было чего-то подобного Меню ассоциаций.
И кода в 10 раз меньше, и выглядит чище.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 15:25В документации она есть.
О... Чего только в документации нет! Даже то, чего вообще нет!
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 11 Sep, 2017 15:43Даже то, чего вообще нет!
Раньше было значительно хуже.
А чтобы стало лучше это кто-то должен сделать.

Так что вы предлагаете?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 15:35Достаточно было чего-то подобного Меню ассоциаций.
И кода в 10 раз меньше, и выглядит чище.
1. Когда начинал писать, ещё не знал, что придётся такое писать. Думал, для chm можно обойтись такой же командой, как для hlp (указать только ключ для поиска) Ну и думал, что потом сам настрою командную строку вызова.
2. если не заводить то, что у меня называется "Алиас", а файлов помощи ассоциировать с маской несколько, то меню выбора конкретного получается совершенно нечитабельным (особенно, если пути длинные).
3. В диалоге ассоциации фиксированное число полей (6). Этого может оказаться мало. Отсюда ListBox.
4. Кнопки "Импорт", "Экспорт" - для отладки у одного из юзеров. Просто чтоб я мог посмотреть, какие у него настройки (не работало). Решил пока оставить. Для примерчика.
4. Ну и - да, для файлов *.hlp, *.chm поля для параметров вызова лишние. Но! Может, потом (или у кого-нить) ещё что будет)
А в остальном он не сильно отличается. Хотя "лишние" поля я, наверно, удалю. И добавлю путь к 7z :-)
Жаль, нет аналога грида. И нет возможности (или я не нашёл?) редактирования строки листбокса прямо "по месту". Т.е. сделать-то можно, но процедура будет ещё сложнее
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 15:50Так что вы предлагаете?
Не, не предлагаю. Я понимаю, что проект - чисто любительский, денег за него не платят.
Во времена СССР в таких случаях привлекали первокурсников за зачёт: и им хорошо, и денег не требуется :-)
Но нужна официальная администрация...
Хотя первое, что хочется получить - это как-то сконвертировать chm в pdf. Я не знаю, правда, есть ли такой софт.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 11 Sep, 2017 16:05Когда начинал писать, ещё не знал, что придётся такое писать. Думал, для chm можно обойтись такой же командой, как для hlp (указать только ключ для поиска)
А какая разница сколько команд, когда в любом случае можно проще.
buniak_a_h wrote: Mon 11 Sep, 2017 16:052. если не заводить то, что у меня называется "Алиас", а файлов помощи ассоциировать с маской несколько, то меню выбора конкретного получается совершенно нечитабельным (особенно, если пути длинные).
Пути можно обрезать, например. Впрочем, к алиасу у меня лично вопросов нет.
buniak_a_h wrote: Mon 11 Sep, 2017 16:053. В диалоге ассоциации фиксированное число полей (6). Этого может оказаться мало. Отсюда ListBox.
Я имел ввиду другой листбокс, то что в основном диалоге конфигурации, вместо него проще было сделать меню.
Но и в "Редактировании помощи" тоже можно упростить интерфейс, если угодно.

Лично я бы настройку ассоциаций вообще изначально сделал бы конфигом в редакторе, а потом уже посмотрел достаточно этого или нет
Добавлено
Например так:

Code: Select all

Types {
  chm = {
    command = "keyhh.exe",
    args = " -MyID -#klink %s %s",
    path = "%FARHOME%\\Encyclopedia\\"
  }
}

Help {
  mask="*.lua",
  files={
    {"FarEncyclopedia.ru.chm"},
    {"macroapi_manual.ru.chm"},
    {"luafar_manual.chm"},
  }
}
Last edited by John Doe on Mon 11 Sep, 2017 16:59, 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:

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

Post by John Doe »

buniak_a_h wrote: Mon 11 Sep, 2017 14:06_ValidKey можно заменить far.NameToRecordTable
Тут я похоже недопонял назначение функции, поэтому нет.

И вот нашёл баг в диалоге конфигурации.
Если в листбоксе нажить F2 или F8 мышью, то падает
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

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:

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

Post by John Doe »

Возможно ли задать для какой-нибудь маски (например *.lua) два файла, один из которых *.hlp, а другой *.chm?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 16:46Возможно ли задать для какой-нибудь маски (например *.lua) два файла, один из которых *.hlp, а другой *.chm?
Да, безусловно.
У меня для Delphi указаны и hlp (для самого языка Пасцаль), и chm для библиотеки jedi.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Mon 11 Sep, 2017 16:30Лично я бы настройку ассоциаций вообще изначально сделал бы конфигом в редакторе, а потом уже посмотрел достаточно этого или нет
Добавлено
Например так:
Ну, я примерно так и делал. Хранение настройки сделал в текстовый файл, соответственно загрузку сделал. До того, как узнал про mf.mload/mf.msave
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Mon 11 Sep, 2017 17:07Да, безусловно.
У меня для Delphi указаны и hlp (для самого языка Пасцаль), и chm для библиотеки jedi.
Ага, меня просто интерфейс сбил с толку.
А Команда для вызова помощи (+параметры) это опциональные поля?
buniak_a_h wrote: Mon 11 Sep, 2017 17:11Ну, я примерно так и делал. Хранение настройки сделал в текстовый файл, соответственно загрузку сделал. До того, как узнал про mf.mload/mf.msave
А при чём тут msave.
Я говорил о том, что можно было бы сэкономить немало часов времени разработки/отладки, если для начала ограничиться текстовым конфигом.
Потом, когда структура данных устаканится, можно и в диалоги вывести конечно.

То, как оно сейчас, учитывая особенности интерфейса, и необходимость как-то неочевидно перемещаться между управляющими элементами, мне не очень удобно.
Post Reply

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