Ранняя тема об алиасах не содержит общей информации, поэтому размещу здесь это предисловие:
Консольные алиасы, также известные как "макросы DOSKEY", это общеизвестный, но в целом недооценённый инструмент работы.
Алиасы позволяют задать удобные сокращения для различных команд.
Почти того же можно добиться, создав кучу батников, и положив их где-то в %PATH%.
Однако (и это главное преимущество) в отличии от батников, через алиасы DOSKEY доступны и команды фара (chdir, set)
Посредством префиксов доступны и команды плагинов (например FAR Commands, Temporary Panel).
А через префикс lua: можно использовать даже макросы.
(в сети можно найти и другие примеры использования)
Алиасы быстро создаются из командной строки: doskey a=b, удалить: doskey a=, просмотреть: doskey /m
Когда алиасов становится много, их можно разместить в файле, и загружать командой doskey /macrofile="путь_к_файлу_алиасов"
Раньше я использовал простой макрос для загрузки макросов при старте: http://forum.farmanager.com/viewtopic.p ... 29#p117329
Однако захотелось автоматически перезагружать файл после его редактирования, так что его пришлось усовершенствовать)
Получившийся скрипт прилагается.
Основная функция данного скрипта — автозагрузка файла алиасов при старте фара, а также после каждой правки
По умолчанию в качестве файла алиасов используется alias.doskey, который должен быть расположен рядом со скриптом.
Об имени файла:
Можно было бы назвать файл иначе, но отдельное расширение выбрано специально.
Это позволяет использовать ассоциацию на маску "*.doskey": DOSKEY/MACROFILE="!\!.!": так можно иметь разные файлы с алиасами, и загружать их по мере надобности.
Кодировка файла: OEM или UTF-8 (c BOM).
Формат файла: типичный ini-файл, разбитый на секции вида [far.exe], [cmd.exe]
Строго говоря, секции необязательны, но удобны:
Позволяют задавать алиасы раздельно для разных приложений.
Например те алисы, которые имеют смысл только в фаре можно разместить в секции [far.exe], а все прочие - в [cmd.exe] (фар понимает и те и другие).
Также алиасы можно использовать в некоторых других приложениях, например [nslookup.exe].
При большом количестве алиасов могут быть проблемы, разделение на 2 секции помогает.
Наличие секций позволяет Colorer'у распознавать и раскрашивать файл как INI (этого можно было достичь дав файлу имя с соответствующим расширением)
Алиасы секции [far.exe] имеют приоритет.
В качестве комментариев можно использовать строки, начинающиеся на ;=
.
Дополнительные функции доступны через префикс командной строки alias:.
alias: [имя_алиаса] — открывает файл алиасов в редакторе, и предпринимает попытку найти нужный алиас (если указан).
После закрытия редактора алиасы перезагружаются (при наличии изменений).
alias: /file [имя_файла] — (пере)загружает файл алиасов. Если файл не указан, то загружается основной.
alias: имя_алиаса=[значение] — позволяет создавать и удалять алиасы (если значение не указано).
Созданные таким образом алиасы действительны только в текущей сессии фара, а чтобы сделать их постоянными необходимо внести их в файл алиасов.
Рекомендуется в первую очередь назначить алиас a=alias:, и в дальнейшем использовать именно его вместо полного префикса.
(см. этот и другие примеры в прилагаемом alias.sample.doskey)
Примечание:
Имя и путь к файлу алиасов можно переназначить изменяя опции в начале скрипта.
Чтобы после каждого обновления скрипта не приходилось вручную восстанавливать изменённые значения опций рекомендуется использовать возможности cfgscript из пакета ScriptsBrowser.
Работает, но через раз у меня вырубается "ConEmu Background" Пробую разобраться с реализацией ShellExecuteEx(...)
Re: Работа с консольными алиасами
Posted: Fri 16 May, 2014 18:17
by John Doe
А если оставить только второй вызов?
Re: Работа с консольными алиасами
Posted: Sat 17 May, 2014 08:43
by GorDAn
Да, работает и с одним вызовом.
Что касается «неуловимой» ошибки, то скрипт отрабатывает в любом случае. Но ошибка возникает только при использовании ShellExecuteEx (...). Проверял на разных системах.
Re: Работа с консольными алиасами
Posted: Sat 17 May, 2014 08:55
by GorDAn
Копаю в сторону SHELLEXECUTEINFO. Может, что в ней указать, чтобы приблизить к поведению os.execute().
Re: Работа с консольными алиасами
Posted: Sat 17 May, 2014 10:11
by John Doe
Да, возможно если что-то ещё заполнить в этой структуре, то это поможет вашему плагину.
Но вообще выше я уже писал что os.execute использует совсем другую функцию для запуска (CreateProcess).
Re: Работа с консольными алиасами
Posted: Sun 29 Jun, 2014 19:45
by John Doe
Скрипт упрощён, за счёт использования os.execute.
Функция пока не юникодная, а значит в пути к макросу должны быть только символы, имеющие соответствие в Ansi-кодировке.
Новая функция для правки алиасов в командной строке. lm:user a [alias] — открыть список алиасов в редакторе и [опционально] установить курсор на "alias".
Для быстрого набора автоматически создаётся алиас, поэтому достаточно a (без lm:user)
!Для работы требуется LuaMacro build 385 (FAR 3 build 3967+)
Отличный скрипт, использую его.
Возник вопрос по созданию алиаса, можно ли как-то вызвать историю команд алиасом?
В bash-e у меня есть alias h=history, хочется сделать такой doskey-алиас для Far
alias h=history
Что-то я не смог найти в документации про вызов истории одной из команд FarCmds или ещё какими...
Работа с консольными алиасами
Posted: Tue 18 Aug, 2015 08:31
by John Doe
gene.pavlovsky wrote: можно ли как-то вызвать историю команд алиасом?
Если менять ComSpec, то алиасы cmd_edit, cmd_reload, авто-добавляемые макросом не работают, т.к. они попадают по умолчанию в [cmd.exe].
Так же не работают алиасы из doskey.ini из секции [cmd.exe]. В этом случаей надо [cmd.exe] заменить на [far.exe], или же можно сделать отдельные секции [far.exe] - общие для любого комспека, используемого в фаре, [cmd.exe] - для стандартного комспека, [bashcmd.sh] (например, мой wrapper скрипт для запуска команды через Cygwin bash) - для альтернативного.
Поменял два первых элемента массива cmd на:
Теперь ComSpec - Cygwin bash (через wrapper скрипт), работают алиасы, включая a и rr.
Работа с консольными алиасами
Posted: Thu 22 Jun, 2017 23:51
by Dennis_Moore
Перестали работать алиасы под моим рабочим пользователем (под остальными пользователями из группы Users и администратором работают с тем же профилем). На вызов любого алиаса получаю
... is not recognized as an internal or external command,
operable program or batch file.
В чем может быть причина ?
FAR 4973, ОС W7SP1.
Upd: Если запустить вручную doskey то он находится, а если набрать rr то получаю то что и выше ('doskey' is not...)
Upd2: Под моим пользователем почему-то нет C:\Windows\System32 в %PATH%. После set PATH=C:\Windows\system32;%PATH% алиасы заработали
Upd3: Оказалось что я в Environment Manager в конце одной из PATH= не дописал ;%PATH%. Он хранит настройки в реестре вот и не работало только у моего пользователя. Короче сам виноват
Работа с консольными алиасами
Posted: Mon 07 Aug, 2017 12:14
by John Doe
Alias v2
!! Файл скрипта переименован, при обновлении необходимо старый удалить !!
doskey.exe не используется, скрипт самостоятельно загружает файл(ы) алиасов, а также может создавать/удалять алиасы из командной строки.
Формат файла алиасов тот же, что использует doskey.exe, с такими дополнениями:
— Файл теперь может быть юникодный (utf8+bom)
— Алиас на "=" не считается ошибкой (то, ради чего всё и было затеяно))
Используется префикс alias:, для удобства рекомендуется прописать в файле алиас на a.
Есть ещё два дополнительных скрипта, написанных давно, но не выложенных по причине того, что (как всегда) запала не хватило на то, чтобы реализовать задуманное в полном объёме, да ещё и описание оформить.
Пока что выкладываю "как есть".
Названия говорят за себя, основные клавиши указаны в опциях, в начале скриптов.
Работа с консольными алиасами
Posted: Sun 10 Mar, 2019 09:27
by andreyefgs
Хороший скрипт (Alias.2.7z).
Но мне не хватало возможности набирать команды независимо от того, какая раскладка включена.
то команда будет исполнена даже если по ошибке или сознательно был введен символ "и"
Вторая фича там - это linux-стайл способ создания файлов: >filename
Работа с консольными алиасами
Posted: Sat 14 Dec, 2019 23:26
by Xerox
спасибо, мне эта утилита помогла привести использование кмд-алиасов в ФАРе в полнофункциональное.
И снимаю свои прошлые претензии и жалобы по поводы алиасов в ФАРе. Скриптинг рулит.
(Оффтопик - у меня сложилось впечатление что надо-бы двигать такие полезности активнее на англоязычном форуме)
Я внес только небольшие, но как мне кажется, важные дополнения:
1.)
там где у Вас 14-я строчка такая:
local aliasfile = far.ConvertPath((O.filename):gsub("%%(.-)%%", win.GetEnv))
это дает нам полную свободу в здании местоположения этого важного файла, унаследовать его от своей "голой" кмд-среды например. что немаловажно.
2.)
Нам конечно же нужны многострочные алиасы для счастья и уверенности в завтрашнем дне, не так ли?
Чтобы они были, Bаш блок на 108- строчке:
if v:match("$T") then
v = "cmd /c \""..v:gsub("$T", "&").."\""
AddConsoleAlias(a, "", "") -- delete existing alias if exists:
end
AddConsoleAlias(a,v, "") -- adding it to all?
AddConsoleAlias(a,v,"cmd.exe") -- let's be sure about it
AddConsoleAlias(a,v,"Far.exe") -- this will not harm аs well
if not AddConsoleAlias(a,v,_exe) then -- the original John Doe approach
Errors[#Errors+1] = ("%d: %s"):format(i,"<see GetLastError>")
..
Таким же макаром можно обработать и остальные спецсимволы кмд-алиасов, сделаю попозже