Работа с консольными алиасами

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Работа с консольными алиасами

Post by John Doe »

Ранняя тема об алиасах не содержит общей информации, поэтому размещу здесь это предисловие:

Основная функция данного скрипта — автозагрузка файла алиасов при старте фара, а также после каждой правки .

Дополнительные функции доступны через префикс командной строки alias:.
  • alias: [имя_алиаса] — открывает файл алиасов в редакторе, и предпринимает попытку найти нужный алиас (если указан).
    После закрытия редактора алиасы перезагружаются (при наличии изменений).
  • alias: /file [имя_файла] — (пере)загружает файл алиасов. Если файл не указан, то загружается основной.
  • alias: имя_алиаса=[значение] — позволяет создавать и удалять алиасы (если значение не указано).
    Созданные таким образом алиасы действительны только в текущей сессии фара, а чтобы сделать их постоянными необходимо внести их в файл алиасов.
Рекомендуется в первую очередь назначить алиас a=alias:, и в дальнейшем использовать именно его вместо полного префикса.
(см. этот и другие примеры в прилагаемом alias.sample.doskey)

Примечание:
  • Имя и путь к файлу алиасов можно переназначить изменяя опции в начале скрипта.
    Чтобы после каждого обновления скрипта не приходилось вручную восстанавливать изменённые значения опций рекомендуется использовать возможности cfgscript из пакета ScriptsBrowser.

Требуется FAR 3 build >=4324
Attachments
Alias.2.7z
(3.98 KiB) Downloaded 477 times
Last edited by John Doe on Mon 07 Aug, 2017 11:03, edited 1 time in total.
GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn »

Latest post of the previous page:

К 1<&2 >nul у меня претензий нет :) Ещё раз спасибо за помощь и скрипт.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Работа с консольными алиасами

Post by John Doe »

GorDAn wrote:

Code: Select all

os.execute(('doskey rr=doskey/macrofile="%s" 1<&2 >nul'):format(_aliasfile))
os.execute(('doskey/macrofile="%s" 1<&2 >nul'):format(_aliasfile))
А что если через ShellExecuteEx запускать DOSKEY.EXE напрямую, без CMD.EXE?
(1<&2 >nul надо конечно убрать, т.к. это параметры командного процессора)
GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn »

Code: Select all

ShellExecuteEx('doskey', ('rr=doskey/macrofile="%s"'):format(_aliasfile))
ShellExecuteEx('doskey', ('/macrofile="%s"'):format(_aliasfile))
Работает, но через раз у меня вырубается "ConEmu Background" :( Пробую разобраться с реализацией ShellExecuteEx(...)
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Работа с консольными алиасами

Post by John Doe »

А если оставить только второй вызов?
GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn »

Да, работает и с одним вызовом.
Что касается «неуловимой» ошибки, то скрипт отрабатывает в любом случае. Но ошибка возникает только при использовании ShellExecuteEx (...). Проверял на разных системах.
GorDAn
Posts: 49
Joined: Sun 26 Jun, 2011 09:47
Has thanked: 6 times

Re: Работа с консольными алиасами

Post by GorDAn »

Копаю в сторону SHELLEXECUTEINFO. Может, что в ней указать, чтобы приблизить к поведению os.execute().
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Работа с консольными алиасами

Post by John Doe »

Да, возможно если что-то ещё заполнить в этой структуре, то это поможет вашему плагину.
Но вообще выше я уже писал что os.execute использует совсем другую функцию для запуска (CreateProcess).
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Работа с консольными алиасами

Post by John Doe »

  • Скрипт упрощён, за счёт использования os.execute.
    Функция пока не юникодная, а значит в пути к макросу должны быть только символы, имеющие соответствие в Ansi-кодировке.
  • Новая функция для правки алиасов в командной строке.
    lm:user a [alias] — открыть список алиасов в редакторе и [опционально] установить курсор на "alias".
    Для быстрого набора автоматически создаётся алиас, поэтому достаточно a (без lm:user)
!Для работы требуется LuaMacro build 385 (FAR 3 build 3967+)



(из шапки то же самое можно скачать архивом)
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Работа с консольными алиасами

Post by John Doe »

  • lm:user (cобытие CommandLine) более не существует.
    Обходимся без lm:user.


(из шапки то же самое можно скачать архивом)
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Работа с консольными алиасами

Post by gene.pavlovsky »

Отличный скрипт, использую его.
Возник вопрос по созданию алиаса, можно ли как-то вызвать историю команд алиасом?
В bash-e у меня есть alias h=history, хочется сделать такой doskey-алиас для Far
alias h=history
Что-то я не смог найти в документации про вызов истории одной из команд FarCmds или ещё какими...
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Работа с консольными алиасами

Post by John Doe »

gene.pavlovsky wrote: можно ли как-то вызвать историю команд алиасом?

Code: Select all

DOSKEY h=lua:Keys"AltF8"
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Работа с консольными алиасами

Post by gene.pavlovsky »

Благодарю!
gene.pavlovsky
Posts: 170
Joined: Tue 16 Feb, 2010 17:55
Location: Luxembourg
Has thanked: 11 times
Been thanked: 9 times
Contact:

Работа с консольными алиасами

Post by gene.pavlovsky »

Если менять 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 на:

Code: Select all

string.format('doskey /exename=Far.exe %s=lua:@"%s" "$*"',cmd_edit,_filename),
string.format('doskey /exename=Far.exe %s=doskey /macrofile="%s"',cmd_reload,Utf8ToAnsi(_aliasfile)),
Теперь ComSpec - Cygwin bash (через wrapper скрипт), работают алиасы, включая a и rr.
User avatar
Dennis_Moore
Posts: 295
Joined: Tue 03 Mar, 2015 19:54
Location: Kiev
Has thanked: 6 times
Been thanked: 17 times

Работа с консольными алиасами

Post by Dennis_Moore »

Перестали работать алиасы под моим рабочим пользователем (под остальными пользователями из группы Users и администратором работают с тем же профилем). На вызов любого алиаса получаю

Code: Select all

... 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%. Он хранит настройки в реестре вот и не работало только у моего пользователя. Короче сам виноват :)
Last edited by Dennis_Moore on Fri 23 Jun, 2017 01:47, edited 4 times in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Работа с консольными алиасами

Post by John Doe »

Alias v2
!! Файл скрипта переименован, при обновлении необходимо старый удалить !!
  • doskey.exe не используется, скрипт самостоятельно загружает файл(ы) алиасов, а также может создавать/удалять алиасы из командной строки.
  • Формат файла алиасов тот же, что использует doskey.exe, с такими дополнениями:
    — Файл теперь может быть юникодный (utf8+bom)
    — Алиас на "=" не считается ошибкой (то, ради чего всё и было затеяно))
  • Используется префикс alias:, для удобства рекомендуется прописать в файле алиас на a.
  • alias.sample.doskey обновлён
  • Задействованы возможности ScriptsBrowser.
  • Прочие исправления и улучшения.
Подробности в шапке.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Работа с консольными алиасами

Post by John Doe »

Есть ещё два дополнительных скрипта, написанных давно, но не выложенных по причине того, что (как всегда) запала не хватило на то, чтобы реализовать задуманное в полном объёме, да ещё и описание оформить.

Пока что выкладываю "как есть".
Названия говорят за себя, основные клавиши указаны в опциях, в начале скриптов.
Attachments
alias_expand.lua
Раскрытие алиаса
(4.35 KiB) Downloaded 294 times
alias_complete.lua
Дополнение алиасов
(6.93 KiB) Downloaded 318 times
Post Reply

Return to “Полезные макросы и скрипты”