Конструктор для макросов © Smitis
Конструктор для макросов © Smitis
Глубокоуважаемые Плагинописатели!
В связи с появлением "макроязыка" возникает необходимость
в наличии удобного редактора для макросов.
Ну, типа, многострочное редактирование с разбором конструкций
if-else-end, while-end,...
Даже пользователю (я не программист) будет полезно.
Может улучшить FAR Macro browser или субплагин к Dialog Manager, или новый плагин...
Ну, не мне вас учить.
Вот такая вот Идея.
Примечание модератора
Связанные темы:
В связи с появлением "макроязыка" возникает необходимость
в наличии удобного редактора для макросов.
Ну, типа, многострочное редактирование с разбором конструкций
if-else-end, while-end,...
Даже пользователю (я не программист) будет полезно.
Может улучшить FAR Macro browser или субплагин к Dialog Manager, или новый плагин...
Ну, не мне вас учить.
Вот такая вот Идея.
Примечание модератора
Связанные темы:
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Как вариант - макросы можно хранить в обычных текстовых файлах.
Достоинства:
- Все возможности встроенного редактора, вплоть до подсветки синтаксиса (colorer)
- Нормальный поиск (Alt-F7, плагины)
- Тексты можно нормально коментировать
- Хранить макросы в разных файлах и папках, группируя по темам, подтемам и т.д.
- Не нужны "лишние" плагины (и так уже до фига)
- Файлы легко копируются на другой компьютер, передаются другому и т.д.
- Простое добавление хоткеев для плагинов
- Бонусы: быстрое обновление настроек мультиарка, быстрое обновление кодовых таблиц и т.п.
Недостатки:
- Требуется один раз напрячься и всё настроить
- Для обновления ФАР приходиться закрывать (закрытие/обновление макросов/запуск осуществляется на полном автомате по макросу)
- Срабатывает только для текущей запущенной копии ФАРа (т.е. необходимо все остальные либо закрыть, либо и в них выполнить обновление)
Реальный пример:
З.Ы. Вполне реальная рабочая схема. Работает у меня уже более 7 (семи) лет. В последнее время добавились новые "структурные" макросы.
Достоинства:
- Все возможности встроенного редактора, вплоть до подсветки синтаксиса (colorer)
- Нормальный поиск (Alt-F7, плагины)
- Тексты можно нормально коментировать
- Хранить макросы в разных файлах и папках, группируя по темам, подтемам и т.д.
- Не нужны "лишние" плагины (и так уже до фига)
- Файлы легко копируются на другой компьютер, передаются другому и т.д.
- Простое добавление хоткеев для плагинов
- Бонусы: быстрое обновление настроек мультиарка, быстрое обновление кодовых таблиц и т.п.
Недостатки:
- Требуется один раз напрячься и всё настроить
- Для обновления ФАР приходиться закрывать (закрытие/обновление макросов/запуск осуществляется на полном автомате по макросу)
- Срабатывает только для текущей запущенной копии ФАРа (т.е. необходимо все остальные либо закрыть, либо и в них выполнить обновление)
Реальный пример:
Code: Select all
; Переключение на другую панель, даже если они обе выключены
! Tab
# Shell
+ DisableOutput
$If (!APanel.Visible)
CtrlO Tab CtrlO
$Else
Tab
$End
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
PostMacro сдесь не причём.mi3antrop wrote:и как эта схема реализуется?
как из файла читать?
у меня с помощью PostMacro как-то не очень получается
Схема такая:
- Запускаем ФАР через командный файл примерно такого содержания (всё под ХР и т.п.):
Code: Select all
set fardir=%~dp0
:far_run
"%fardir%Far.exe" %*
:: При выходе из ФАРа проверяется наличие FarRestart.bat.
:: Если его нет - завершение работы.
if not exist "%fardir%FarRestart.bat" exit
:: Иначе - выполняем...
call "%fardir%FarRestart.bat"
:: Удаляем...
del "%fardir%FarRestart.bat"
:: И перезапускаем ФАР
goto far_run
- И наконец макрос, который сначала выполняет этот пункт меню, затем закрывает ФАР. ФАР закрывается и через секунду-другую открывается снова.
Все макросы в текстовых файлах двух типов в одном месте (папка FAR\Macros и подпапки по тематике):
*.fmac - старые макросы, по сути куски файлов *.reg без начальной строки REGEDIT4, с коментариями.
*.fmex - новые, расширенные (структурные) макросы.
В них же прописаны горячие клавиши для меню плагинов.
Так как файлы текстовые, они прекрасно редактируются встроенным редактором. Со всеми фичами и прибамбасами (плагинами). Можно настроить colorer для подсветки синтаксиса. Приспособить TrueTemplate для ввода структурных операторов. И т.д. Обновление у меня нажатием клавиш CtrlShift- (макрос для обновления). Заодно преконфигурируется MultiArc - как реестр (файлы *.farc), так и Custom.ini (файлы *.fcst). Быстрое изменение некоторых настроек для тестирования (в основном те, которые в TechInfo). Недавно добавил перезагрузку кодовых таблиц.
В общем, фокус в том, что записать в FarRestart.bat. У моих знакомых, те кто пользуется ФАРом, подобные "скрипты" энтузиазма не вызвали - сказали слишком сложно. Если сдесь кого-нибудь заинтересует - выложу.
Smitis, а... рестарт зачем?
Тебе достаточно сделать (в меню):
1. Прописать макрос в реестре
2. Перезагрузить ВСЕ макросы из реестра - macro:load
После п.2 FAR будет знать о твоем макросе.
Можно, между п.1 и п.2 сделать "macro:save", на тот случай, если...
Для противников FARCmds - читаем про команду ACTL_KEYMACRO
Тебе достаточно сделать (в меню):
1. Прописать макрос в реестре
2. Перезагрузить ВСЕ макросы из реестра - macro:load
После п.2 FAR будет знать о твоем макросе.
Можно, между п.1 и п.2 сделать "macro:save", на тот случай, если...
Для противников FARCmds - читаем про команду ACTL_KEYMACRO
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Ну вот. Шедевр скриптотворчества. Сильно прошу не пинать.wolf wrote:ты бы поделился своим FarRestart.bat и macro\*.fmex что-ли.
Подредактировал, причесал...
FAR_ReloadMacros.cmd
Связка CMD+KIXTART в одном файле. Почему kixtart? Просто он был под рукой в командировке, когда в голову пришла эта дурацкая идея. Работает ТОЛЬКО под XP (2000, 2003, etc.). В принципе, можно адаптировать под 9х. Собственно, под неё первоначально и делалось, только расширенных макросов тогда не было. Но желания адаптировать нет. И системы 9х под рукой для экспериментов тоже нет.
Будучи запущенный без параметром /R, создаст FAR_Restart.bat куда пропишет сам себя с параметром /1 (это если используется с перезапуском ФАРа).
С параметром /M обновляет только макросы и клавиши плагинов. Запускать через меню; следующей командой должна быть macro:load (должен быть установлен плагин FarCmds.dll).
Без параметров ничего в реестр не пишет, создаёт в ТЕКУЩЕЙ папке два файла freg.tmp и fmex.tmp с результатами своей работы.
Kixtart можно взять сдесь: http://kixtart.org/
Специальная установка не требуется. Можно взять из архива один файл kix32.exe и кинуть куда-нибудь, где ось его найдёт. Например в %windir%\system32. По идее, должно работать и в папке с ФАРом.
В начале проверяется переменная среды %fardir%. У меня она устанавливается в командном файле, через который запускается ФАР. Можно поменять её на farhome, те, кто использует одноимённый плагин. Если этой переменной нет - она устанавливается равной пути, откуда запущен скрипт.
Используемая структура папок (в папке ФАРа):
- Macros - Основная папка с файлами макросов (*.fmax, *.fmex)
- Macros\First - Эти макросы будут загружены в первую очередь и сдесь не дожно быть файлов *.fmex (они могут быть, но особого смысла в этом нет). В последствии, эти макросы могут быть переопределены в других файлах. У меня сдесь заглушки для отключения хоткеев для вызова Tree (ну не люблю я этот режим), заглушки для отключения Alt-буква и Alt-Shift-буква. Раньше было больше...
- Macros\Editor и другие - макросы по темам
- Macros\Local - макросы, зависимые от компьютера (переменная %CompName%, устанавливаю сам)
- Archivers - для настройки MultiArc-а
- CodeTables - для настройки кодовых таблиц
- Config, Config\Once - для экспериментов (в текущей версии временно убрал)
- Из файлов *.fmac *.ftab *.farc *.ftab командами copy собирается рег-файл. Попутно собирается новый custom.ini. С ключом /M собирается только рег-файл из *.fmac. В начало рег-файла помещаются строки для удаления необходимых разделов.
Внимание! Скрипт удаляет разделы HKCU\Software\Far\KeyMacros и HKCU\Software\Far\PluginHotKeys. Все необходимые настройки горячих клавиш для плагинов должны быть сделаны в файлах макросов! Без ключа /M также удаляются разделы HKCU\Software\Far\Plugins\MultiArc, HKLM\Software\Far\Plugins\MultiArc и HKCU\Software\Far\CodeTables. - Из файлов *.fmex собирается общий "fmex" файл со структурными макросами
- Kixtart обрабатывает этот файл, дописывая результат в общий рег-файл.
- Импортируется рег-файл через regedit
Типы строк:
- ; - Коментарий (строка пропускается).
- [ - Тоже коментарий (так сложилось исторически).
- ! - Начало макроса. В этой строке перечисленны названия клавиш (может быть несколько), разделённые пробелами. После ! пробел не обязателен.
- # - В этой строке перечислены через пробелы разделы реестра (области действия), в которых будут определены макросы.
Пример:
# Shell, Search, Editor, Common - > - Так же, как и # определяет области действия, но глобальные. Если для какого-то макроса область дествия специально не задана, будут использованы значения, заданные такой строкой. По умолчанию содержит одно значение Shell. Каждая такая строка определяет новые глобальные значения. Эти строки не привязываются к какому-то конкретному макросу, заданому строкой !.
- + - Строка с параметрами через пробелы, значения которых будут установлены в 1 - в реестр будут добавлены строки вида "NotEmptyCommandLine"=dword:1 Всегда добавляется параметр "DisableOutput"=dword:1, даже если он не указан. Для его отключения существует псевдо параметр EnableOutput.
Пример:
+ EmptyCommandLine NoPluginPanels Selection - & - Строка задаёт горячие клавиши для меню плагинов.
Пример:
& 7ZIP/7-ZIPFAR.DLL <7> <7>
& 7ZIP/7-ZIPFAR.DLL%1 <8>
Первый символ в угловых скобках - для меню плагинов F11. Второй - для меню настроек. Если нужен только второй, вместо первого необходимо поставить <> (то же можно поставить и вместо второго). Строки с горячими клавишами не должны "залезать" в макрос.
Вообще, мне кажется, горячие клавиши плагинов - неотъемлемая часть макросов. Поэтому им сдесь уделено столько внимания. - - Все остальные непустые строки от строки ! до следующей строки ! или & собираются в одну строку, которая будет помещена в реестр в параметр Sequence.
ToDo:
- Макросы для разных пользователей (подраздел реестра FAR\Users)
- FAR\Macros\Vars
- Attachments
-
- FAR_ReloadMacros.rar
- (2.6 KiB) Downloaded 667 times
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Парочка переделаных примеров со страницы
http://api.farmanager.com/ru/macro/examples.html
http://api.farmanager.com/ru/macro/examples.html
Code: Select all
; Создание папки с именем = текущей дате
! CtrlShiftF7
# Shell Search
+ NoPluginPanels
%folder=date("%d.%m0.%Y");
$If (!fexist(%folder))
F7 CtrlY $Text %folder Enter
$End
; Искать тот же файл на другой панели что и на активной
; F5 ShiftEnter CtrlIns - применено чтобы получить имя файла вне зависимости
; пусто/непусто в cmdline и сколько выделено на панели файлов
! CtrlAltLeft CtrlAltRight
# Shell Search
$IClip
$If (((Bof && APanel.Root) || !Bof) && PPanel.Visible)
$If (fexist(PPanel.Path+"\\"+APanel.Current) == 1)
F5 ShiftEnter CtrlIns Esc
Tab Home
Alt< ShiftIns Esc
$End
$End
; DisableOutput везде включается по умолчанию
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Постеснялся. Вот только чуток в порядок приведуwolf wrote:Smitis
Так всю папку macro - выложить постеснялся, или жаба душит?
А пока более универсальная новая версия 2.00 (неспится, что-то )
Использование: FAR_Macros folders user
user пока не используется
folders список папок с макросами ОТНОСИТЕЛЬНО папки, в которой находится скрипт. Предполагается, скрипт находится в папке с макросами. Папки перечисляются через точку с запятой. Вложенные папки не обрабатываются. Если где-то есть пробел, весь список заключить в кавычки. Для задания папки, в которой находится скрипт, использовать точку. Если список не задан, будет использован мой т.е. как если бы использовался вызов FAR_Macros First;.;Utils;Editor;Files;Plugins;Apps
Кому не нравятся непонятные значки в начале строк, теперь можно использовать:
- вместо ! использовать .m или .macro или .macros (отделять пробелами от остального);
- вместо # - .s или .sections
- вместо + - .p или .params или .parameters
- вместо & - .h или .hotkey
- вместо > - .g или .global
Те же примеры могут начинаться так:
Code: Select all
.M CtrlShiftF7
.S Shell Search
.P NoPluginPanels
.macros CtrlAltLeft CtrlAltRight
.sections Shell Search
- Attachments
-
- FAR_Macros.rar
- FAR_Macros.cmd v.2.00
- (2.31 KiB) Downloaded 664 times
- HaRT
- Moderator
- Posts: 10860
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Rek>pth
Если не гнаться за минимальным числом нажатий, то по клавише узнать описание макроса и так несложно:
1. Средствами самого Фара узнать, назначен ли макрос на данную клавишу.
2. В Реестре посмотреть описание макроса.
Продолжение
Если не гнаться за минимальным числом нажатий, то по клавише узнать описание макроса и так несложно:
1. Средствами самого Фара узнать, назначен ли макрос на данную клавишу.
2. В Реестре посмотреть описание макроса.
Продолжение
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Продолжение
Reason: Продолжение