Ранняя тема об алиасах не содержит общей информации, поэтому размещу здесь это предисловие:
Консольные алиасы, также известные как "макросы 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.
Требуется FAR 3 build >=4324
Re: Работа с консольными алиасами
Posted: Sat 08 Mar, 2014 23:59
by John Doe
Запланированы (и практическии реализованы) некоторые дополнительные функции.
Но для начала вот скрипт в первом приближении:
Спасибо за классный скрипт! Столкнулся со следующей проблемой, иногда при запуске FAR появлялось сообщение «Исключительная ситуация» в заголовке вкладки ConEmu. И вылетал плагин «ConEmu Background». Чем больше была пауза в скрипте тем реже возникала эта ситуация.
Заменил ShellExecuteEx(...) на os.execute(...) ошибка пропала. Макросы DOSKEY работают. Какие преимущества ShellExecuteEx над os.execute?
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 11:59
by John Doe
Для os.execute надо ещё предварительно конвертировать путь из UTF-8 в ANSI.
И если в пути присутствует что-то, не имеющее соответствия в ANSI, то будет ошибка.
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 14:32
by GorDAn
Это касается названий на кириллице?
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 14:34
by GorDAn
Ещё вопрос, для чего нужен таймаут в скрипте?
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 14:38
by John Doe
Таймаут для того чтобы можно было разобрать сообщение. Для красоты.
GorDAn wrote:Это касается названий на кириллице?
С кириллицей проблем не будет, если в вашей системе Ansi это 1251
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 14:50
by GorDAn
Спасибо. А есть, какие ни будь предположения по поводу ошибки?
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 14:54
by John Doe
Вероятно с плагином не всё хорошо.
Для интереса скачал свежий Conemu, но не смог воспроизвести проблему (может конечно от настроек зависит).
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 15:02
by GorDAn
В том и беда, что не всегда выскакивает. У меня тоже последний FAR и ConEmu. Повесил запуск FAR на макрос и запускаю подряд. На пятом шестом проявляется. Сейчас попробую на чистом профиле.
Ещё помучаю Можно ли выводить сообщения скрипта в консоль?
Re: Работа с консольными алиасами
Posted: Wed 14 May, 2014 15:19
by GorDAn
Ошибка воспроизводится только когда включён плагин ConEmu Background.
(На моей старой машине) видно невооружённым взлядом, что при использованиии os.execute фон мигает несколько раз, а при использовании ShellExecuteEx только раз.
Необязательно даже смотреть исходники, очевидно что os.execute вместо вызова ShellExecuteEx выполняет какие-то действия (вызов C-функции "system", msvcrt.dll).
Мне так и не удалось воспроизвести ошибку. Рекомендую обратится на багтрекер Conemu, а скрипт попробуйте упростить до минимального (например оставьте только вызовы ShellExecuteEx).
Re: Работа с консольными алиасами
Posted: Thu 15 May, 2014 11:58
by GorDAn
John Doe wrote:... Рекомендую обратится на багтрекер Conemu ...
Пока ошибку точно не определю, смысла нет обращаться. Возможно это из за Windows, у меня 8.1 x64.
Re: Работа с консольными алиасами
Posted: Thu 15 May, 2014 12:09
by John Doe
Как по мне, то os.execute вполне приемлемый вариант.
Или можно ShellExecuteEx заменить на CreateProcessW, но уж больно громоздко выходит.
P.S.
Честно говоря, сперва я реализовал всё самым что ни на есть "правильным" образом, используя AddConsoleAliasW (и прочие связанные функции этого семейства).
Затем всё выкинул, т.к. тупой вызов doskey позволил сократить код ровно в 3 раза.
Re: Работа с консольными алиасами
Posted: Thu 15 May, 2014 15:33
by GorDAn
Хотел сообщение вывести не в окно, а в консоль. Чтобы после загрузки было примерно так...