Кавычки (QuoteSpace)

Здесь можно сообщить о найденных багах в Far.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Кавычки (QuoteSpace)

Post by buniak_a_h »

Latest post of the previous page:

makhaon wrote: Sun 15 Sep, 2019 17:06
buniak_a_h wrote: Sun 15 Sep, 2019 01:09 Но в этих диалогах и просто кавычки тоже не принимаются
Это не так :) Вот сейчас попробовал в браузере Crlt+O - "C:\Program Files (x86)\Far Manager" зашло без вопросов.
Возможно, зависит от версии виндов.
Поясню. Раньше очень мешали и кавычки, и пробел в конце (по Ctrl+F вставляется). Ругался, но приходилось вычищать... Видимо, с тех пор что-то изменилось: и LibreOffice, и старая Delphi-7, во всяком случае, съедают.
makhaon wrote: Sun 15 Sep, 2019 17:06 Ctrl+F в помощь Вставляет сразу путь + файл
Вы таки мне это рассказываете? :sarcastic_hand
Ситуация, когда папку надо взять с одной панели, а файл - с другой. А Ctrl+F и Вам раньше бы не помешал: там конечного слэша вне кавычек никогда не было.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Кавычки (QuoteSpace)

Post by Smitis »

Как ни крути, вставлять слеш плохо, не вставлять плохо...
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Кавычки (QuoteSpace)

Post by DrKnS »

Ну как там, придумали, что с !\ делать - AI или новую закорючку?
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Кавычки (QuoteSpace)

Post by Smitis »

DrKnS wrote: Sun 15 Sep, 2019 19:57 Ну как там, придумали, что с !\ делать - AI или новую закорючку?
Коротко напомню о проблеме:
- Пути могут содержать пробелы, поэтому их надо заключать в кавычки.
- Если путь в кавычках с \ на конце - некоторые программы воспринимают такой слеш как спецсимвол.
- Обратный слеш после кавычек воспринимается не правильно другими программами.
- Не ставить слеш совсем не получиться, так как корень диска всегда будет заканчиваться на \, а если добавлять \ в ручную к пути без слеша на конце, не все программы такой двойной слеш воспримут правильно.

Бардак, в общем, ещё со времён ДОСа.

Тут только поможет:
- Делать как я выше предложил - шаблон для путей. Тогда в критической ситуации всегда можно проверить через IF что там. (IF "!{P}"=="\")
- Делать AI, как Вы предложили.

Шаблоны универсальнее. AI, наверное, проще реализовать. Но как должен вести себя AI с корнем диска, не представляю.
Разум когда-нибудь победит.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Кавычки (QuoteSpace)

Post by Yegor »

Smitis wrote: Sun 15 Sep, 2019 21:28 Если путь в кавычках с \ на конце - некоторые программы воспринимают такой слеш как спецсимвол.
Можно пример?

Нашел здесь: https://devblogs.microsoft.com/oldnewth ... 0/?p=12833
Last edited by Yegor on Sun 15 Sep, 2019 22:53, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Кавычки (QuoteSpace)

Post by DrKnS »

But what if you wanted a backslash at the end of the string? Then you protect the backslash with a backslash, leaving the quotation mark unprotected.
Т.е. правильно делать lalala\\", что, в принципе, логично.
makhaon
Posts: 10
Joined: Mon 09 Sep, 2019 11:31
Has thanked: 2 times

Кавычки (QuoteSpace)

Post by makhaon »

buniak_a_h wrote: Sun 15 Sep, 2019 18:09 Вам раньше бы не помешал: там конечного слэша вне кавычек никогда не было.
Мне мешала не столько текущая папка, а ctrl+[ ctrl+]. постоянно приходится их использовать. и конечный слэш был очень не удобен.
Smitis wrote: Sun 15 Sep, 2019 21:28 Делать AI, как Вы предложили.
Я вообще не вижу проблемы для файловой оболочки исправлять автоматом пути/файлы. Мы пишем софт с путями связанный ну очень относительно и отдаленно. И то у меня для правок путей целая отдельная функция:
  1. function NormalizePath(const DirName: string): string;
  2.  
  3. var
  4.  
  5.  AddSlash: boolean;
  6.  
  7. begin
  8.  
  9.  Result := ReplaceChr(DirName, '', '"?*''');
  10.  
  11.  case Result.Length of
  12.  
  13.   0: ;
  14.  
  15.   1: if CharInSet(UpCase(Result[1]), ['A'..'Z']) then
  16.  
  17.     Result := Result + ':\'
  18.  
  19.    else
  20.  
  21.   else
  22.  
  23.    if not Result.EndsWith('\') then
  24.  
  25.     Result := Result + '\';
  26.  
  27.  end;
  28.  
  29.  Result := ReplaceChr(Result, '\', '/');
  30.  
  31.  AddSlash := Result.StartsWith('\\');
  32.  
  33.  Result := ReplaceText(Result, '\\', '\');
  34.  
  35.  if AddSlash then
  36.  
  37.   Result := '\' + Result;
  38.  
  39. end;
Last edited by makhaon on Mon 16 Sep, 2019 00:26, edited 4 times in total.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Кавычки (QuoteSpace)

Post by Yegor »

DrKnS wrote: Sun 15 Sep, 2019 23:42 Т.е. правильно делать lalala\\", что, в принципе, логично.
Там статья больше про CommandLineToArgvW. И разные компиляторы/CRT/RTL/библиотеки действительно могут парсить по-разному, например delphi не поддерживает "escaping", и там:
"a\" -> a\
"a"\ -> a\
"a\\b" -> a\\b
a""b -> ab
"a""b" -> ab
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Кавычки (QuoteSpace)

Post by Smitis »

Даже у самой MS парсинг строки идёт по разному. Например, в WSH (VBS, JS) обратный слеш - обычный символ

Code: Select all

For Each arg In WScript.Arguments : n=n+1 : WScript.Echo "Argument " & CStr(n-1) & ": <" & arg & ">" : Next
Last edited by Smitis on Mon 16 Sep, 2019 08:17, edited 1 time in total.
Разум когда-нибудь победит.
Post Reply

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