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

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

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

Post by S.A. » Mon 02 Sep, 2019 22:10

cat&dog.ext --> ассоциация с !& --> 'dog.ext' is not recognized as an internal or external command, operable program or batch file.

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

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

Post by HaRT » Mon 02 Sep, 2019 22:21

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: 25
Joined: Mon 17 Nov, 2014 19:52

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

Post by S.A. » Mon 02 Sep, 2019 23:29

OK, пожалуй, изначально я не вполне удачно впихнул описание в одну строку, поэтому поясню. Тут же речь о другом. Можно и файл с пробелами привести как пример поведения cmd, но при использовании !& фар помещает имя файла с пробелами в кавычки (в отличие от !,!.! и прочих, которые требуют эксплицитного заключения метасимвола в кавычки в ассоциациях). Что вроде бы совершенно логично и ожидаемо, учитывая роль !&.

User avatar
DrKnS
Posts: 5342
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

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

Post by DrKnS » Mon 02 Sep, 2019 23:46

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

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

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

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

Post by HaRT » Mon 02 Sep, 2019 23:48

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: 25
Joined: Mon 17 Nov, 2014 19:52

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

Post by S.A. » Tue 03 Sep, 2019 00:23

I, for one, буду безусловно welcomе любую реализацию, признанную кворумом оптимальной.

User avatar
DrKnS
Posts: 5342
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

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

Post by DrKnS » Tue 03 Sep, 2019 01:06

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

S.A.
Posts: 25
Joined: Mon 17 Nov, 2014 19:52

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

Post by S.A. » Tue 03 Sep, 2019 09:03

Спасибо!

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

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

опечатка:

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: 8840
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

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

Post by HaRT » Tue 03 Sep, 2019 14:31

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

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

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

Post by zg » Tue 03 Sep, 2019 15:29

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

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

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

Post by HaRT » Tue 03 Sep, 2019 16:47

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

User avatar
DrKnS
Posts: 5342
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

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

Post by DrKnS » Tue 03 Sep, 2019 23:05

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

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

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

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

Post by HaRT » Tue 03 Sep, 2019 23:19

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

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

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

Post by HaRT » Tue 03 Sep, 2019 23:26

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

User avatar
DrKnS
Posts: 5342
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

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

Post by DrKnS » Tue 03 Sep, 2019 23:31

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

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

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

Post by HaRT » Tue 03 Sep, 2019 23:32

DrKnS wrote:
Tue 03 Sep, 2019 23:31
хелп - вперед
Договорились. Завтра напишу.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

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