View Issue Details

IDProjectCategoryView StatusLast Update
0000818WishesCommand Line/Executepublic2018-11-09 12:14
ReporterJohnDoeAssigned To 
PrioritynormalSeveritytweakReproducibilityN/A
Status closedResolutionopen 
Product Version 
Target VersionFixed in Version 
Summary0000818: Обработка параметров в консольных алиасах
DescriptionФаром поддерживается специальный символ $*, позволяющий задать место вставки параметров

doskey qf=format $* /q /u

В отличие от cmd фар обладает "искуственным интеллектом" - если вообще не указать "$*", то от добавит параметры в конец.

Это может показаться удобным, но есть случаи в которых это может помешать.

Вот пример - алиас выводящий командную строку с помощью которой он был запущен

DOSKEY test=macro:post CtrlE msgbox(CmdLine.Value) CtrlX

Если его запустить с параметрами (test param1 param2) - получим нежелательный эффект - параметры добавятся в текст макроса со всемы вытекающими
Additional InformationПример не с потолка - столкнулся я с этим пытаясь передать в макрос параметр коммандной строки содержащий "\" (бэкслэш) - путь к файлу.
Естественно это не сработало, поскольку \ имеет в макросе особое значение, и для задания пути его необходимо удвоить (\\) либо заменить на прямой (/)

В самом макросе это невозможно, вот если бы ввести спецсимвол который бы конвертировал слэши... (мечтательно: $*/ или $*\)
TagsNo tags attached.
Build

Activities

Raistlin

2011-01-18 19:06

reporter   bugnote:0006166

> Фаром поддерживается специальный символ $*, позволяющий задать место вставки параметров
Наверное, не Фаром, а doskey'ем?

Честно говоря, я не понял сути проблемы. Да, при test param1 param2 мусор в комстроку попадает, но при чем здесь
>спецсимвол который бы конвертировал слэши
?

JohnDoe

2011-01-18 19:51

updater   bugnote:0006170

>Наверное, не Фаром, а doskey'ем?
Фаром вестимо.

>не понял сути проблемы
Хочу запускать алиас с параметрами, чтобы параметры передались макросу.
НО! Из-за специального значения слэша это невозможно сделать напрямую.
(Сейчас в макроязыке появились verbatim strings, но тогда вместо слэша проблемы возникают с кавычками)

Поэтому я хотел применить другой подход: вытащить параметры из истории.
Это тоже невозможно, т.к. несмотря на отсутствие $* параметры всё равно попадают в текст алиаса-макроса, нарушая его работу.

Raistlin

2011-01-18 20:59

reporter   bugnote:0006175

> Фаром вестимо.
Ткни, pls, где это в хелпе про такое сказано. Я вообще не понимаю, что значит "место вставки параметров". Параметров чего? У Far'овских макросов бывают параметры?
Зато в хелпе doskey - пожалуйста:
$* Symbol replaced by everything following macro name on command line.

Я, в общем, хотел "живой" пример, примерно тот, на котором ты споткнулся, потому что из начального описания ни фига не понятно, как связано описание проблемы и пожелания по поводу ее решения.

JohnDoe

2011-01-18 21:11

updater   bugnote:0006177

Last edited: 2011-01-18 21:15

View 2 revisions

У алиасов могут быть параметры, место их подстановки определяется шаблонным символом $*
В случае фара алиас может представлять собой макрос.
Простой пример: ass=macro:post F9 c a CtrlAltF print("$*")

Тот пример, на котором я споткнулся, приводить здесь полностью не имеет смысла.
Вкратце: пытался сделать алиас типа eval <file>, с помощью которого хотел выполнять макросы из заданного файла..

Raistlin

2011-01-18 21:28

reporter   bugnote:0006180

Это уж слишком вкратце. Я имел в виду: "есть такой-то файл, есть такой-то макрос, есть такой-то алиас, запускаю его с такими-то параметрами и обламываюсь".

> У алиасов могут быть параметры, место их подстановки определяется шаблонным символом $*
Ага, только к Far'у это имеет весьма опосредованное отношение. Потому я и споткнулся о первую фразу.

JohnDoe

2011-01-18 21:35

updater   bugnote:0006182

>Ага, только к Far'у это имеет весьма опосредованное отношение
Прямее не бывает, поскольку подстановкой занимается фар - загляните в execute.cpp (там всё видно невооружённым глазом, образования не требуется).

>Это уж слишком вкратце.
Мне кажется в тикете уже написано больше чем достаточно, если что-то осталось непонятым - пишите в личку (на форуме).

JohnDoe

2011-01-18 21:46

updater   bugnote:0006183

Подводя итоги: поведение фара при подстановке параметров отличается от такового у cmd.
А практика показала вот что:

1. Это ведёт к невозможности реализации некоторых способов использования алиасов (кому-то эти способы покажутся редкими, но тем не менее)

2. Преимуществ это различие с cmd никаких не даёт, лично я всё равно в алиасах явно указываю $* (для порядка, кроме того это имеет смысл делать из соображений совместимости)

alexy

2011-02-05 23:04

administrator   bugnote:0006358

Far 1.7 is no longer supported

Issue History

Date Modified Username Field Change
2009-04-07 15:38 JohnDoe New Issue
2011-01-18 19:06 Raistlin Note Added: 0006166
2011-01-18 19:51 JohnDoe Note Added: 0006170
2011-01-18 20:59 Raistlin Note Added: 0006175
2011-01-18 21:11 JohnDoe Note Added: 0006177
2011-01-18 21:15 JohnDoe Note Edited: 0006177 View Revisions
2011-01-18 21:28 Raistlin Note Added: 0006180
2011-01-18 21:35 JohnDoe Note Added: 0006182
2011-01-18 21:46 JohnDoe Note Added: 0006183
2011-02-05 23:04 alexy Note Added: 0006358
2011-02-05 23:04 alexy Status new => closed
2018-11-09 12:14 JohnDoe Project Far Manager 1.7x => Wishes