Page 3 of 5

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

Posted: Sat 08 Mar, 2014 23:52
by John Doe
Ранняя тема об алиасах не содержит общей информации, поэтому размещу здесь это предисловие:

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

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

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

Требуется FAR 3 build >=4324

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

Posted: Fri 16 May, 2014 15:24
by GorDAn

Latest post of the previous page:

Code: Select all

ShellExecuteEx('doskey', ('rr=doskey/macrofile="%s"'):format(_aliasfile))
ShellExecuteEx('doskey', ('/macrofile="%s"'):format(_aliasfile))
Работает, но через раз у меня вырубается "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+)



(из шапки то же самое можно скачать архивом)

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

Posted: Tue 01 Jul, 2014 13:58
by John Doe
  • lm:user (cобытие CommandLine) более не существует.
    Обходимся без lm:user.


(из шапки то же самое можно скачать архивом)

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

Posted: Tue 18 Aug, 2015 08:04
by gene.pavlovsky
Отличный скрипт, использую его.
Возник вопрос по созданию алиаса, можно ли как-то вызвать историю команд алиасом?
В bash-e у меня есть alias h=history, хочется сделать такой doskey-алиас для Far
alias h=history
Что-то я не смог найти в документации про вызов истории одной из команд FarCmds или ещё какими...

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

Posted: Tue 18 Aug, 2015 08:31
by John Doe
gene.pavlovsky wrote: можно ли как-то вызвать историю команд алиасом?

Code: Select all

DOSKEY h=lua:Keys"AltF8"

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

Posted: Thu 20 Aug, 2015 01:06
by gene.pavlovsky
Благодарю!

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

Posted: Tue 26 Apr, 2016 23:17
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.

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

Posted: Thu 22 Jun, 2017 23:51
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%. Он хранит настройки в реестре вот и не работало только у моего пользователя. Короче сам виноват :)

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

Posted: Mon 07 Aug, 2017 12:14
by John Doe
Alias v2
!! Файл скрипта переименован, при обновлении необходимо старый удалить !!
  • doskey.exe не используется, скрипт самостоятельно загружает файл(ы) алиасов, а также может создавать/удалять алиасы из командной строки.
  • Формат файла алиасов тот же, что использует doskey.exe, с такими дополнениями:
    — Файл теперь может быть юникодный (utf8+bom)
    — Алиас на "=" не считается ошибкой (то, ради чего всё и было затеяно))
  • Используется префикс alias:, для удобства рекомендуется прописать в файле алиас на a.
  • alias.sample.doskey обновлён
  • Задействованы возможности ScriptsBrowser.
  • Прочие исправления и улучшения.
Подробности в шапке.

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

Posted: Mon 07 Aug, 2017 12:38
by John Doe
Есть ещё два дополнительных скрипта, написанных давно, но не выложенных по причине того, что (как всегда) запала не хватило на то, чтобы реализовать задуманное в полном объёме, да ещё и описание оформить.

Пока что выкладываю "как есть".
Названия говорят за себя, основные клавиши указаны в опциях, в начале скриптов.

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

Posted: Sun 10 Mar, 2019 09:27
by andreyefgs
Хороший скрипт (Alias.2.7z).
Но мне не хватало возможности набирать команды независимо от того, какая раскладка включена.

Придумал такое решение:


Смысл:
Если, к примеру, в alias.doskey имеется alias

Code: Select all

b=chdir "C:\Backup\"
то команда будет исполнена даже если по ошибке или сознательно был введен символ "и"

Вторая фича там - это linux-стайл способ создания файлов:
>filename

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

Posted: Sat 14 Dec, 2019 23:26
by Xerox
спасибо, мне эта утилита помогла привести использование кмд-алиасов в ФАРе в полнофункциональное.
И снимаю свои прошлые претензии и жалобы по поводы алиасов в ФАРе. Скриптинг рулит.

Я внес только небольшие, но как мне кажется, важные дополнения:
1.)
там где у Вас 14-я строчка такая:

Code: Select all

filename  = "alias.doskey",
.. там я делаю так:

Code: Select all

filename = "%k%\\batches\\alias.doskey.ini"
.. и далее раскрываем переменные среды (если они есть, у меня они есть).
Это делается заменой Вашей 59-й строчки:

Code: Select all

local aliasfile = __path..O.filename
.. на такую:

Code: Select all

local aliasfile = far.ConvertPath((O.filename):gsub("%%(.-)%%", win.GetEnv))
это дает нам полную свободу в здании местоположения этого важного файла, унаследовать его от своей "голой" кмд-среды например. что немаловажно.
2.)
Нам конечно же нужны многострочные алиасы для счастья и уверенности в завтрашнем дне, не так ли?
Чтобы они были, Bаш блок на 108- строчке:

Code: Select all

if not AddConsoleAlias(a,v,_exe) then
  Errors[#Errors+1] = ("%d: %s"):format(i,"<see GetLastError>")
 ..
.. заменяем на:

Code: Select all

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>")
..
Таким же макаром можно обработать и остальные спецсимволы кмд-алиасов, сделаю попозже