Page 1 of 2

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Mon 02 Sep, 2019 22:10
by S.A.
cat&dog.ext --> ассоциация с !& --> 'dog.ext' is not recognized as an internal or external command, operable program or batch file.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Mon 02 Sep, 2019 22:21
by HaRT
S.A. wrote: Mon 02 Sep, 2019 22:10 not recognized as an internal or external command, operable program or batch file
И при чём тут ассоциации Фара? Выполняю команду в cmd.exe — получаю такой же результат:

Code: Select all

D:\>type cat&dog.txt
The system cannot find the file specified.
'dog.txt' is not recognized as an internal or external command,
operable program or batch file.
А всё потому, что & в cmd является оператором последовательного выполнения команд. Если имя файла заключить в кавычки, то работает ожидаемо:

Code: Select all

D:\>type "cat&dog.txt"
Cats ate dogs.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Mon 02 Sep, 2019 23:29
by S.A.
OK, пожалуй, изначально я не вполне удачно впихнул описание в одну строку, поэтому поясню. Тут же речь о другом. Можно и файл с пробелами привести как пример поведения cmd, но при использовании !& фар помещает имя файла с пробелами в кавычки (в отличие от !,!.! и прочих, которые требуют эксплицитного заключения метасимвола в кавычки в ассоциациях). Что вроде бы совершенно логично и ожидаемо, учитывая роль !&.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Mon 02 Sep, 2019 23:46
by DrKnS
Сабж должен звучать как "фар не позволяет окавычивать имена в генерируемых списках по определённому критерию, поэтому получаемые списки иногда неюзабельны".

Могу предложить по аналогии с !@! добавить модификатор Q - "enclose names in quotes (unconditionally)".
И, соответственно, в !@! Q сделать тоже "unconditionally", а не "containing spaces".

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Mon 02 Sep, 2019 23:48
by HaRT
DrKnS wrote: Mon 02 Sep, 2019 23:46 Могу предложить по аналогии с !@! добавить модификатор Q - "enclose names in quotes (unconditionally)".
И, соответственно, в !@! Q сделать тоже "unconditionally", а не "containing spaces".
Горячо поддерживаю! А как это будет записываться в случае с !&? !&Q? Просто иначе возникает синтаксическая неоднозначность.

Кстати, вместо безусловного закавычивания можно проверять наличие не пробелов, а символов из System.QuotedSymbols — тогда поведение будет единообразным с той частью Фара. Впрочем, я не вижу у безусловного закавычивания недостатков, кроме потенциального нарушения совместимости каких-то экзотических сохранённых ассоциаций/команд.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 00:23
by S.A.
I, for one, буду безусловно welcomе любую реализацию, признанную кворумом оптимальной.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 01:06
by DrKnS
HaRT wrote: Mon 02 Sep, 2019 23:48!&Q
Да.
я не вижу у безусловного закавычивания недостатков
Я тоже. 5464.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 09:03
by S.A.
Спасибо!

Пара мелочей:

В русском хелпе:

опечатка:

Code: Select all

^<wrap>Например, #!&Q# - имена помеченных файлов, заключеные в кавычки.

Code: Select all

^<wrap>Например, #!&Q# - имена помеченных файлов, заключенные в кавычки.
В английском хелпе:

Code: Select all

^<wrap>For example, #!&Q# means the list of selected file names in quotes
я бы переформулировал как

Code: Select all

^<wrap>For example, #!&Q# denotes the list of selected file names, each enclosed in quotes.
ну и заодно:

Code: Select all

^<wrap>For example, #!@@AFQ!# means "name of file with the list of
selected file names, in ANSI encoding, include full pathnames, in quotes".

Code: Select all

^<wrap>For example, #!@@AFQ!# denotes "name of file containing the list of
selected file names, in ANSI encoding, with full pathnames, each enclosed in quotes".
means -> denotes -- просто для единообразия c текстом выше

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 14:31
by HaRT
DrKnS wrote: Tue 03 Sep, 2019 01:06Я тоже. 5464.
Спасибо.
Но у меня радикальный вопрос: в каких случаях может потребоваться НЕ закавычивать имена файлов, когда они идут списком без разбиения на строки? Может, пока никто не успел привыкнуть, сделать закавычивание по умолчанию хотя бы для !& и !&~, а модификатор (например q) использовать для НЕ-закавычивания?

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 15:29
by zg
HaRT wrote: Tue 03 Sep, 2019 14:31в каких случаях может потребоваться НЕ закавычивать имена файлов, когда они идут списком без разбиения на строки?
HaRT wrote: Tue 03 Sep, 2019 14:31а модификатор (например q) использовать для НЕ-закавычивания?
у меня когнитивный диссонанс.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 16:47
by HaRT
zg wrote: Tue 03 Sep, 2019 15:29 у меня когнитивный диссонанс
Попытаюсь объяснить чуть более формально.
1. Я не знаю, когда может понадобиться в !& НЕ закавычивать. Но это не означает, что в каком-то (экзотическом) сценарии кавычки всё-таки что-то не сломают.
2. Поскольку я уверен, что закавычивать в одной строке надо (почти?) всегда, я предлагаю сделать это вариантом по умолчанию, т.е. при отсутствии какого-либо модификатора.
3. Чтобы дать пользователем экзотических сценариев возможность всё-таки получить список незакавыченных имён файлов, я предлагаю добавить новый модификатор. И, в знак противопоставления модификатору Q (смысл которого в том, чтобы закавычивать) я предлагаю выбрать в качестве этого нового «отрицательного» модификатора q (НЕ закавычивать).
Так моя позиция стала понятнее?

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 23:05
by DrKnS
S.A., спасибо, поправил.

HaRT, Q в !& сейчас единообразно с Q в !@!.
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 23:19
by HaRT
DrKnS wrote: Tue 03 Sep, 2019 23:05Q в !& сейчас единообразно с Q в !@!.
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Полностью согласен. Именно поэтому я в противоположность заглавной Q предлагаю строчную q (я проверил, сейчас она не имеет специального значения) — подобно тому, как в регэкспах при обозначении классов символов заглавная и соответствующая строчная буква имеют противоположное значение (например, \w и \W). А изменить умолчание со старого, которое часто не работает, на новое, которое будет работать практически всегда, — это ли не полезное изменение?
Т.е. я предлагаю так:
!&Q — закавычивать;
!&q — НЕ закавычивать;
!&закавычивать.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 23:26
by HaRT
DrKnS wrote: Tue 03 Sep, 2019 23:05 Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Предвосхищая довод о том, что, казалось бы, получится несоответствие в умолчаниях для !@! и !&: так ведь у них и характер формируемых данных ощутимо разный. В одном случае каждое имя файла располагается на отдельной строке, т.ч. их между собой не спутаешь; а во втором случае имена с пробелами без закавычивания склеиваются в общее месиво. Поэтому разное умолчание в части закавычивания для этих двух случаев я считаю совершенно оправданным.

Амперсанд в имени файла несовместим с метасимволом !&

Posted: Tue 03 Sep, 2019 23:31
by DrKnS
Я в целом не против.
Могу сделать, если не будет возражений и если напишете хелп, и деньгихелп - вперед :)