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

Здесь можно сообщить о найденных багах в Far.
S.A.
Posts: 61
Joined: Mon 17 Nov, 2014 19:52
Been thanked: 7 times

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

Post by S.A. »

cat&dog.ext --> ассоциация с !& --> 'dog.ext' is not recognized as an internal or external command, operable program or batch file.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post 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.
Фар есть инструмент, а не нянька. © 2009 DrKnS
S.A.
Posts: 61
Joined: Mon 17 Nov, 2014 19:52
Been thanked: 7 times

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

Post by S.A. »

OK, пожалуй, изначально я не вполне удачно впихнул описание в одну строку, поэтому поясню. Тут же речь о другом. Можно и файл с пробелами привести как пример поведения cmd, но при использовании !& фар помещает имя файла с пробелами в кавычки (в отличие от !,!.! и прочих, которые требуют эксплицитного заключения метасимвола в кавычки в ассоциациях). Что вроде бы совершенно логично и ожидаемо, учитывая роль !&.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Сабж должен звучать как "фар не позволяет окавычивать имена в генерируемых списках по определённому критерию, поэтому получаемые списки иногда неюзабельны".

Могу предложить по аналогии с !@! добавить модификатор Q - "enclose names in quotes (unconditionally)".
И, соответственно, в !@! Q сделать тоже "unconditionally", а не "containing spaces".
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

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

Кстати, вместо безусловного закавычивания можно проверять наличие не пробелов, а символов из System.QuotedSymbols — тогда поведение будет единообразным с той частью Фара. Впрочем, я не вижу у безусловного закавычивания недостатков, кроме потенциального нарушения совместимости каких-то экзотических сохранённых ассоциаций/команд.
Last edited by HaRT on Mon 02 Sep, 2019 23:55, edited 1 time in total.
Reason: Добавлен абзац про System.QuotedSymbols
Фар есть инструмент, а не нянька. © 2009 DrKnS
S.A.
Posts: 61
Joined: Mon 17 Nov, 2014 19:52
Been thanked: 7 times

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

Post by S.A. »

I, for one, буду безусловно welcomе любую реализацию, признанную кворумом оптимальной.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

HaRT wrote: Mon 02 Sep, 2019 23:48!&Q
Да.
я не вижу у безусловного закавычивания недостатков
Я тоже. 5464.
S.A.
Posts: 61
Joined: Mon 17 Nov, 2014 19:52
Been thanked: 7 times

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

Post 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 текстом выше
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

DrKnS wrote: Tue 03 Sep, 2019 01:06Я тоже. 5464.
Спасибо.
Но у меня радикальный вопрос: в каких случаях может потребоваться НЕ закавычивать имена файлов, когда они идут списком без разбиения на строки? Может, пока никто не успел привыкнуть, сделать закавычивание по умолчанию хотя бы для !& и !&~, а модификатор (например q) использовать для НЕ-закавычивания?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

HaRT wrote: Tue 03 Sep, 2019 14:31в каких случаях может потребоваться НЕ закавычивать имена файлов, когда они идут списком без разбиения на строки?
HaRT wrote: Tue 03 Sep, 2019 14:31а модификатор (например q) использовать для НЕ-закавычивания?
у меня когнитивный диссонанс.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

zg wrote: Tue 03 Sep, 2019 15:29 у меня когнитивный диссонанс
Попытаюсь объяснить чуть более формально.
1. Я не знаю, когда может понадобиться в !& НЕ закавычивать. Но это не означает, что в каком-то (экзотическом) сценарии кавычки всё-таки что-то не сломают.
2. Поскольку я уверен, что закавычивать в одной строке надо (почти?) всегда, я предлагаю сделать это вариантом по умолчанию, т.е. при отсутствии какого-либо модификатора.
3. Чтобы дать пользователем экзотических сценариев возможность всё-таки получить список незакавыченных имён файлов, я предлагаю добавить новый модификатор. И, в знак противопоставления модификатору Q (смысл которого в том, чтобы закавычивать) я предлагаю выбрать в качестве этого нового «отрицательного» модификатора q (НЕ закавычивать).
Так моя позиция стала понятнее?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

S.A., спасибо, поправил.

HaRT, Q в !& сейчас единообразно с Q в !@!.
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

DrKnS wrote: Tue 03 Sep, 2019 23:05Q в !& сейчас единообразно с Q в !@!.
Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Полностью согласен. Именно поэтому я в противоположность заглавной Q предлагаю строчную q (я проверил, сейчас она не имеет специального значения) — подобно тому, как в регэкспах при обозначении классов символов заглавная и соответствующая строчная буква имеют противоположное значение (например, \w и \W). А изменить умолчание со старого, которое часто не работает, на новое, которое будет работать практически всегда, — это ли не полезное изменение?
Т.е. я предлагаю так:
!&Q — закавычивать;
!&q — НЕ закавычивать;
!&закавычивать.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10822
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

DrKnS wrote: Tue 03 Sep, 2019 23:05 Единообразие - это хорошо, разнобой - это не очень хорошо.
А менять !@! уже не представляется возможным.
Предвосхищая довод о том, что, казалось бы, получится несоответствие в умолчаниях для !@! и !&: так ведь у них и характер формируемых данных ощутимо разный. В одном случае каждое имя файла располагается на отдельной строке, т.ч. их между собой не спутаешь; а во втором случае имена с пробелами без закавычивания склеиваются в общее месиво. Поэтому разное умолчание в части закавычивания для этих двух случаев я считаю совершенно оправданным.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Я в целом не против.
Могу сделать, если не будет возражений и если напишете хелп, и деньгихелп - вперед :)
Post Reply

Return to “Глюки и баги”