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

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

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

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 261 times
Last edited by John Doe on Mon 07 Aug, 2017 11:03, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

Latest post of the previous page:

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

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

andreyefgs
Posts: 1
Joined: Sun 10 Mar, 2019 08:10

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

Post by andreyefgs »

Хороший скрипт (Alias.2.7z).
Но мне не хватало возможности набирать команды независимо от того, какая раскладка включена.

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


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

Code: Select all

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

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

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post 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>")
..
Таким же макаром можно обработать и остальные спецсимволы кмд-алиасов, сделаю попозже
Last edited by Xerox on Sat 14 Dec, 2019 23:33, edited 4 times in total.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

1)
Xerox wrote:
Sat 14 Dec, 2019 23:26
filename = "%k%\\batches\\alias.doskey.ini"
Так нельзя, это значение используется в Event { description="Aliases: reload on edit";

Для задания пути есть параметр path.
Xerox wrote:
Sat 14 Dec, 2019 23:26
.. и далее раскрываем переменные среды (если они есть, у меня они есть).
[...]

Code: Select all

(O.filename):gsub("%%(.-)%%", win.GetEnv)
Соответственно это надо делать для O.path.
Но смысла мало, потому что проще сразу задать path = win.GetEnv("bla").."blabla"

2)
Обработку $T можно предусмотреть в фаре.
Если очень надо в скрипте, то могу добавить поддержку кастомной функции препроцессинга.

Code: Select all

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
Не надо так делать.
1. Незачем.
2. Это ломает редактирование существующих алиасов

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

Мои мелкие неважные замечания далее по тексту
John Doe wrote:
Tue 17 Dec, 2019 09:18
Но смысла мало, потому что проще сразу задать path = win.GetEnv("bla").."blabla"
А мне с Енвом выглядит неуклюже, во отличие от %бла%блабла
И еще более неулкюже будет выглядеть если это %бла%бла%мля%бла надо раскрывать например
дело вкуса впрочем
John Doe wrote:
Tue 17 Dec, 2019 09:18
Обработку $T можно предусмотреть в фаре.
Очень бы того хотелось, вы имеете в виду что вы может это сделать?
John Doe wrote:
Tue 17 Dec, 2019 09:18
Если очень надо в скрипте, то могу добавить поддержку кастомной функции препроцессинга.
доблавляйте, тaкая воможность как минимум не повредит
с другой стороны, думаю что вникать как воспользоваться такой кастомизацией будут единицы.
А если предусмотреть такой скрипт который сам уже знает как переваривать немногие и нехитрые спецсимволы алиасов - то думаю что доступность и полезность такого скрипта будет больше на порядок
(ну я так думаю - далее и везде добавлять к сказанному мной "ИМХО")
John Doe wrote:
Tue 17 Dec, 2019 09:18
Не надо так делать.
хорошо, не буду )
Last edited by Xerox on Wed 18 Dec, 2019 20:37, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

Xerox wrote:
Wed 18 Dec, 2019 20:36
дело вкуса впрочем
Верно. И предлагаемое вами я тоже (в своё время) рассматривал.
Xerox wrote:
Wed 18 Dec, 2019 20:36
вы имеете в виду что вы может это сделать?
Вы можете предложить PR.
Xerox wrote:
Wed 18 Dec, 2019 20:36
доблавляйте, тaкая воможность как минимум не повредит
Добавлять надо необходимое, а не всё, что "не повредит".

citRiks
Posts: 672
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 196 times
Been thanked: 44 times

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

Post by citRiks »

John Doe wrote:
Tue 17 Dec, 2019 09:18
Обработку $T можно предусмотреть в фаре
А разве в Фаре в алиасах вместо $t не применяется & (амперсанд)? Правда, сейчас уже не помню, где это сказано. Но у меня, например, вполне работает вот такой тестовый алиас:

Code: Select all

сейчас=if %time:~0,2% EQU 13 (@echo Сейчас: %date% %time:~0,5%, Обед!&@echo это проба конвейера команд в алиасах Фара) Else (@echo Сейчас: %date% %time:~0,5%)&@echo это проба конвейера команд 
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

В фаре да.
А речь о том, чтобы одни и те же алиасы одинаково работали и в фаре, и в cmd.

citRiks
Posts: 672
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 196 times
Been thanked: 44 times

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

Post by citRiks »

John Doe,
В Win10 этот же алиас (с амперсандом) работает и в cmd:
too.png
в doskeyL.ini он записан в секции [cmd.exe].
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks wrote:
Fri 20 Dec, 2019 09:46
В Win10 этот же алиас (с амперсандом) работает и в cmd:
А в тюрьме сейчас ужин.. макароны!
(c) из фильма
Найдите десять отличий не глядя в подсказку: ))

Code: Select all

test1=set a=111 $T echo a:%a% $T set a=222 $T echo a:%a%
test2=set a=111 &  echo a:%a% &  set a=222 &  echo a:%a%
Last edited by Xerox on Fri 20 Dec, 2019 14:31, edited 2 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

John Doe wrote:
Thu 19 Dec, 2019 08:16
Вы можете предложить PR.
Простите за невежество и нежелание искать, а что такое PR?
Public Relations? Public Request? Porn Review?
John Doe wrote:
Thu 19 Dec, 2019 08:16
Добавлять надо необходимое, а не всё, что "не повредит".
"Необходимого" во всех этих ваших/наших компуктерах вообще ничего нет.. миллионы лет как-то жили без этого всего, и ничо.
Вот я когда пишу проги для людей, то предусматриваю потребности,
все что несложно воплотить и полезно людям делаю сам и заранее.
А вот то что уже сложно - то без дополнительной мотивации все равно не буду делать :)

Не желая грузить вас, отвлекать ли от чего другого полезного, я не буду настаивать ни на чем,
но прошу обьяснить что куда какую заявку нужно подавать?
может удасться подбить кого-нибудь на такую бюрократию..
Last edited by Xerox on Fri 20 Dec, 2019 14:44, edited 1 time in total.

User avatar
HaRT
Moderator
Posts: 9443
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 105 times
Been thanked: 222 times

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

Post by HaRT »

Xerox wrote:
Fri 20 Dec, 2019 14:43
что такое PR?
Pull Request
Фар есть инструмент, а не нянька. © 2009 DrKnS

citRiks
Posts: 672
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 196 times
Been thanked: 44 times

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

Post by citRiks »

Xerox wrote:
Fri 20 Dec, 2019 14:28
Найдите десять отличий не глядя в подсказку: ))

Code: Select all

test1=set a=111 $T echo a:%a% $T set a=222 $T echo a:%a%
test2=set a=111 &  echo a:%a% &  set a=222 &  echo a:%a%
Да, так разница очевидна. Спасибо.

А нельзя ли привести ещё и парочку-тройку не тестовых, а реальных алиасов с конвейерами команд? По-возможности.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks wrote:
Fri 20 Dec, 2019 16:17
А нельзя ли привести ещё и парочку-тройку не тестовых, а реальных алиасов с конвейерами команд? По-возможности.
Любой маленький БАТ-файл, ну например такое:

Code: Select all

:: ffmpeg_mix_aud_img.bat
set audio=%~1
set image=%~2
if "%image%"=="" set image=%~dp0still.png
set video=%audio%.mpeg
ffmpeg 	-loop 1 -i "%image%" -i "%audio%" -shortest -acodec:1 copy "%video%"
На этом же примере понятно становится зачем нужны $1-9
самое место в алиасах

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

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

Post by Xerox »

citRiks,
Может вы откроете PR на $T, $1-9 ? )
и остальные отсюда, раздел "Creating a macro":
https://docs.microsoft.com/en-us/previo ... dfrom=MSDN
Last edited by Xerox on Fri 20 Dec, 2019 16:34, edited 1 time in total.

citRiks
Posts: 672
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 196 times
Been thanked: 44 times

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

Post by citRiks »

Xerox,
Благодарю за примеры и за ссылку. А то я смотрел по справке doskey /?>doskey.txt, а из неё отвлечённо без конкретных примеров трудно понять. Но теперь, на основании сегодняшней информации я вполне согласен с тем, что $T и $1-9 желательно бы прикрутить и в Фар.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

Post Reply

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