Page 4 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

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

Posted: Mon 07 Aug, 2017 12:38
by John Doe

Latest post of the previous page:

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

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

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

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

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

Posted: Tue 17 Dec, 2019 09:18
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. Это ломает редактирование существующих алиасов

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

Posted: Wed 18 Dec, 2019 20:36
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 Не надо так делать.
хорошо, не буду )

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

Posted: Thu 19 Dec, 2019 08:16
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кая воможность как минимум не повредит
Добавлять надо необходимое, а не всё, что "не повредит".

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

Posted: Thu 19 Dec, 2019 19:34
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 это проба конвейера команд 

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

Posted: Fri 20 Dec, 2019 09:03
by John Doe
В фаре да.
А речь о том, чтобы одни и те же алиасы одинаково работали и в фаре, и в cmd.

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

Posted: Fri 20 Dec, 2019 09:46
by citRiks
John Doe,
В Win10 этот же алиас (с амперсандом) работает и в cmd:
too.png
в doskeyL.ini он записан в секции [cmd.exe].

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

Posted: Fri 20 Dec, 2019 14:28
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%

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

Posted: Fri 20 Dec, 2019 14:43
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 Добавлять надо необходимое, а не всё, что "не повредит".
"Необходимого" во всех этих ваших/наших компуктерах вообще ничего нет.. миллионы лет как-то жили без этого всего, и ничо.
Вот я когда пишу проги для людей, то предусматриваю потребности,
все что несложно воплотить и полезно людям делаю сам и заранее.
А вот то что уже сложно - то без дополнительной мотивации все равно не буду делать :)

Не желая грузить вас, отвлекать ли от чего другого полезного, я не буду настаивать ни на чем,
но прошу обьяснить что куда какую заявку нужно подавать?
может удасться подбить кого-нибудь на такую бюрократию..

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

Posted: Fri 20 Dec, 2019 14:59
by HaRT
Xerox wrote: Fri 20 Dec, 2019 14:43что такое PR?
Pull Request

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

Posted: Fri 20 Dec, 2019 16:17
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%
Да, так разница очевидна. Спасибо.

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

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

Posted: Fri 20 Dec, 2019 16:28
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
самое место в алиасах

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

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

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

Posted: Fri 20 Dec, 2019 17:13
by citRiks
Xerox,
Благодарю за примеры и за ссылку. А то я смотрел по справке doskey /?>doskey.txt, а из неё отвлечённо без конкретных примеров трудно понять. Но теперь, на основании сегодняшней информации я вполне согласен с тем, что $T и $1-9 желательно бы прикрутить и в Фар.