View Issue Details

IDProjectCategoryView StatusLast Update
0003011Far ManagerCommand Line/Executepublic2019-02-19 13:11
ReportertsvstarAssigned To2useven10 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionno change required 
Product Version 
Target VersionFixed in Version 
Summary0003011: Ctrl+Enter works wrong for ".." for case if path have spaces
DescriptionIf press cntrl+enter for .. entry inside of farmanager directory we will get
"C:\Program Files\Far Manager\"

That is incorrect because interpreted as " at the end and append all following keys to this.

Example in context:
hello.exe "C:\Program Files\Far Manager\" --test>123

This programm just print all received argv as is. And we got:
count = 2
C:\MY\proj\hello\bin\Debug\hello.exe
C:\Program Files\Far Manager" --test

Expected:
count = 3
C:\MY\proj\hello\bin\Debug\hello.exe
C:\Program Files\Far Manager
--test

TagsNo tags attached.
Build0

Relationships

parent of 0003211 closed2useven10 Far Manager лишний "\" при вставке пути из панели 
related to 0003178 closed Far Manager Неверное расположение завершающей двойной кавычки (") при получении полного пути к папке 
related to 0003198 closed2useven10 Known Error Не верная вставка текущей папки 
related to 0003200 closed2useven10 Far Manager Неоднообразное поведение по Ctrl+F на "нормальной папке" и на ".." 
related to 0003700 new Far Manager Ctrl+enter in panel resurns bad path: backslash out of qoutes 

Activities

2useven10

2015-10-31 13:44

developer   bugnote:0014031

Зачем там вообще хвостовой слеш?
Надо либо убрать его либо подставлять "D:\Path Name"\

DrKnS

2015-10-31 13:49

administrator   bugnote:0014033

Зачем там вообще полный путь?

Smitis

2015-11-02 08:11

reporter   bugnote:0014043

Несколько лет назад на форуме уже всплывало. То, как интерпретируется \" зависит исключительно от программы и ФАР здесь не причём.

2useven10

2015-11-02 11:09

developer   bugnote:0014044

Last edited: 2015-11-02 13:19

View 2 revisions

Интерпретация это отдельный вопрос.
Речь о том, что поведение для ".." отличается от остальных случаев.
Нормально подставляется только имя файла/каталога без "\"
Слеш нужен в одном случае - при попадании в корень диска, его можно отдельно обработать. Насчёт полного пути, я бы оставил, иногда удобно.

Smitis

2015-11-02 13:32

reporter   bugnote:0014047

Тогда надо подставлять .. и дело с концом, будет одинаково во всех случаях, что видим на экране, то и подставляется, без проявления ИИ.

Smitis

2015-11-02 16:16

reporter   bugnote:0014050

К слову о сабже

> That is incorrect because interpreted as " at the end and append all following keys to this.

test.vbs:
For Each arg In WScript.Arguments : n=n+1 : WScript.Echo CStr(n)&": "&arg : Next

run:
cscript test.vbs "C:\Program Files\Far Manager\" --test

result:
1: C:\Program Files\Far Manager\
2: --test

tsvstar

2016-01-22 14:50

reporter   bugnote:0014233

Last edited: 2016-01-22 14:59

View 4 revisions

Конкретный сценарий использования в котором я наткнулся и зарепортил проблему:

У меня есть несколько python-скриптов и C++ прог (скомпиленых в CodeBlocks) для разного рода пакетной обработки файлов. На вход надо подать путь к директории для обработки и задать ключи обработки.

И в описанном случае получается полный бред. И python и C-проги в описанном случае все ключи после пути включают в путь(собственно исходя из синтаксиса экранирования так и должно быть).

Делать вставку ".." считаю неправильным. Это удаляет функционал а не исправляет его. Ведь альтернативных путей снести полный путь в командную строку не существует.
Замыкающий слэш не нужен. Собственно об этом и написал.

Да вполне возможно это зависит от интерпретирующей программы. И да в винде двойная кавычка не может присутствовать в имени файла, так что в принципе можно вполне надёжно распарсить этот момент.

Но вот я привёл конкретные примеры некорректной интерпретации на ровном месте. CPython и простой пример int main(argc, argv) { printf('%d',argc); } скомпиленный в CodeBlocks.
И единственный способ получить нормальное разбиение там - это вручную получать полную строку из винды и парсить самому с учётом такого вот особого случая. Нереально костыльно.

Так почему бы тогда не убрать камень преткновения если это ничему не мешает?

2useven10

2016-01-26 14:15

developer   bugnote:0014237

4521
"D:\Path Name"\

DrKnS

2016-01-28 20:47

administrator   bugnote:0014244

> Ведь альтернативных путей снести полный путь в командную строку не существует.

Справку, я так понимаю, вы не читали? Там этих путей, как у дурака фантиков.


> 4521

Я в курсе, что тикет о Ctrl-Enter, который реализован через Ctrl-F, и что локальные фиксы это так здорово, но есть же и Ctrl-[ всякие.

2useven10

2016-01-28 22:19

developer   bugnote:0014245

Есть всякие, да.
Честно говоря, об этом не думал.
Но я и для Ctrl-Enter не уверен, что так правильно.
Сделал, чтобы оживить тему и получить фидбэк.

Smitis

2016-01-29 08:07

reporter   bugnote:0014246

Я сталкивался с разборщиками комстроки, которые не понимали кавычки внутри параметра, т.е. параметр должен быть ПОЛНОСТЬЮ в кавычках, "D:\Path Name"\ интерпретировался бы как ДВА параметра.

tsvstar

2016-01-29 15:30

reporter   bugnote:0014247

Ctrl+F и Ctrl+[ дают тот же эффект. Слеш прямо перед финальной кавычкой

как есть сноска полного пути предполагает что это отдельный параметр (ибо сразу за ним ставится пробел).
И если нам нужен полный путь не к директории а к файлу - то в любом случае прийдется идти внутрь кавычек и добавлять там файл.
Вот только то что при отстутсвии хвостового слеша его тогда надо будет в этом случае добавить - очевидно, то то что снесенный путь директории может интерпретироваться по-разному - совсем не очевидно. Даже наткнувшись на эту проблему - я периодически забываю и удивляюсь почему проги отказываются запускаться.

2useven10

2016-01-29 17:05

developer   bugnote:0014248

@Smitis
можно конкретнее?

Продолжаем трясти дерево...
4523 "D:\Path Name"\ - очень глобально.
Перенесено в QuoteSpace(). Теперь так везде, в том числе и в Plugin API.

Smitis

2016-01-29 22:03

reporter   bugnote:0014250

> можно конкретнее?

А что именно конкретней? Некоторые программы воспримут C:\"Program Files"\"Common Files"\"Microsoft Shared" как один параметр C:\Program Files\Common Files\Microsoft Shared, а некоторые попытаются разбить на несколько (аж на четыре).
Соответственно, "C:\Program Files\Common Files\Microsoft Shared"\ будет два параметра
Таких программ мало, но они попадаются.

Данная проблема не имеет универсального решения в принципе. Либо в корне диска будет не так, либо \ как экранирующий символ перед кавычками воспримется, либо разбивка на параметры будет не так.

> собственно исходя из синтаксиса экранирования так и должно быть

Само по себе ТАКОЕ использование экранирующего символа уже бред, но какой идиот это придумал (ещё под ДОС) уже не найти.

DrKnS

2016-01-30 14:48

administrator   bugnote:0014253

Может, действительно, просто не пихать туда слеш?
Точнее, пихать только тогда, когда это корень.

Smitis

2016-01-30 15:42

reporter   bugnote:0014254

> Точнее, пихать только тогда, когда это корень.

Тогда возникает неоднозначность, потребуются дополнительные проверки. Из меню (а ведь там таже ситуация) проверки сделать трудно, потребуется дополнительная "обвязка" в виде командных файлов и т.п.
Я над этим думал, когда делал утилиту, в которой надо было выставлять пути через переменные среды. Так плохо для одних программ, по-другому плохо для других... :mad:

Может лучше саломоново решение - параметр в настройках, а там каждый выставит так, как ему ближе к сердцу?

2useven10

2016-01-30 15:57

developer   bugnote:0014255

Last edited: 2016-02-15 18:04

View 3 revisions

> А что именно конкретней?

Назовите этих редких героев.
У меня такое впечатление, что они, как Неуловимый Джон, никому не нужны.

> Может, действительно, просто не пихать туда слеш?

Слеш удобен, когда предполагается продолжение ввода имени.
В противном случае, его придётся вбивать руками.
Для Сtrl-Enter, у которого добавляется пробел, т.е. ввод имени вроде бы завершён,
он действительно не нужен. А для Ctrl-[, Ctrl-] - вполне полезен.

Все программы, которыми я пользуюсь, cmd-shell и, насколько я помню, стандартный
парсер комстроки сишной библиотеки без проблем принимают слеш после кавычек.

DrKnS

2016-01-30 15:59

administrator   bugnote:0014256

> Может лучше саломоново решение - параметр в настройках, а там каждый выставит так, как ему ближе к сердцу?

Every time you provide an option, you're asking the user to make a decision

2useven10

2016-01-30 16:07

developer   bugnote:0014257

Я бы подождал недельку-другую, чтобы посмотреть на реакцию.
Если действительно кому-то будет мешать, тогда ввести настройку.

Smitis

2016-01-30 18:42

reporter   bugnote:0014259

2 DrKnS
Я читал эту статью, даже на русском. Здесь немного не то - не надо выбирать КАЖДЫЙ раз, выбрать ОДИН раз и забыть.

DrKnS

2016-01-30 18:54

administrator   bugnote:0014260

Я к тому, что опции на такие мелочи - это перебор.
Надо определиться с наиболее совместимым поведением, а любители экзотических программ могут слеш и макросом добавить/убрать/передвинуть.

Smitis

2016-02-21 14:09

reporter   bugnote:0014331

Last edited: 2016-02-21 14:09

View 2 revisions

Посмотрел, сколько кнопкосочетаний надо намакросить на предмет "вернуть прежнее поведение". Получилось 15 плюс несколько собственных зависимых макросов. Может, всё-таки лучше настройку, например, флаг в System.QuotedName управляющий поведением размещения \ до кавычек или после?

zorinoleg

2016-03-21 21:35

reporter   bugnote:0014373

Если так задумано в новых версиях, подскажите как можно сделать как было?
Конкретно интересует как заставить макрос работать с результатом как было в старых версиях?



Macro {
  area="Shell"; key="CtrlIns"; flags="EmptyCommandLine NoPluginPanels"; 
description="If CtrlIns was pressed while on .. and command line is empty then copy to clipboard 
the path of the current folder"; action = function()

if APanel.Bof and not APanel.Selected and not APanel.Root then
  Keys('F7 CtrlShift[ CtrlIns Esc')
else
  Keys('CtrlIns')
end

  end;
}

2useven10

2016-03-21 23:23

developer   bugnote:0014374

ShiftAltIns делает всё что нужно.
Т.е.
action = function() Keys 'ShiftAltIns' end;

2useven10

2016-03-21 23:29

developer   bugnote:0014375

Правда без кавычек и \
Добавить несложно.

2useven10

2016-03-21 23:43

developer   bugnote:0014376

Но, пожалуй, я не понял что должен делать ваш макрос.

zorinoleg

2016-03-22 09:32

reporter   bugnote:0014377

По последовательности нажатых клавиш видно что он делает:
заменяет просто CtrlIns
на
F7 -> CtrlShift[ -> CtrlIns -> Esc

2useven10

2016-03-22 10:49

developer   bugnote:0014379

Чем мешает слеш после кавычек?
Где Вы используете потом содержимое клипборда?

zorinoleg

2016-03-22 11:01

reporter   bugnote:0014380

в диалоговых окнах windows
например:
При сохранении какого либо файла в приложении просто вставляю и все.
Перед кавычками норм. А если будет за кавычками то будет ошибка о неверном пути.

Столько лет пользуюсь FAR и не было необходимости в слеш за кавычками.

На макрос не знаю как создать условие отслеживания этого слэша, так как кавычки со слэшем появляются только тогда когда имя превышает 8 символов.
Если длина имени не превышает то нет ни кавычек ни слэша.

zorinoleg

2016-03-22 11:07

reporter   bugnote:0014381

ShiftAltIns ни чего не происходит после нажатия
что за комбинация такая?

2useven10

2016-03-22 11:10

developer   bugnote:0014382

Можно подробнее - как Вы получаете 'ошибку о неверном пути'.
Простейший способ mf.clip(1, '"'..APanel.Path..'\\"') -- всегда с кавычками.

2useven10

2016-03-22 11:12

developer   bugnote:0014383

AltShiftIns - полный путь в клипборд.

zorinoleg

2016-03-22 11:26

reporter   bugnote:0014384

Last edited: 2016-03-22 11:30

View 3 revisions

Например в диалоговом окне сохранения файла вставляем:
"C:\Program Files\Common Files"\

и получаем ошибку:

[Window Title]
Save As

[Content]
"C:\Program Files\Common Files"\
The file name is not valid.

[OK]

А если ввести туда же :
"C:\Program Files\Common Files\"
то произойдет переход в папку

2useven10

2016-03-22 11:33

developer   bugnote:0014385

Если вы потом добавляете к пути имя файла, то в диалоговых окнах путь лучше вообще без кавычек.
Например, для Notepad:
D:\Dir Name\q\t.txt -- Ok
"D:\Dir Name\q"\t.txt -- The filename is invalid
"D:\Dir Name\q\"t.txt -- The filename is invalid

2useven10

2016-03-22 11:37

developer   bugnote:0014386

Last edited: 2016-03-22 16:35

View 2 revisions

Студия по пути без кавычек и без слеша, с пробелами - нормально меняет каталог.

2useven10

2016-03-22 11:39

developer   bugnote:0014387

Last edited: 2016-03-22 11:40

View 2 revisions

Так что достаточно: mf.clip(1, APanel.Path)
или просто AltShiftIns

zorinoleg

2016-03-22 11:43

reporter   bugnote:0014388

Имя файла мне не надо подставлять.

Куда прописать этот код?

Так что достаточно: mf.clip(1, APanel.Path)
или просто AltShiftIns

2useven10

2016-03-22 11:45

developer   bugnote:0014389

код вместо вашего
Keys('F7 CtrlShift[ CtrlIns Esc')

2useven10

2016-03-22 11:47

developer   bugnote:0014390

AltShiftIns на ".." вставит в буфер текущий каталог панели.

zorinoleg

2016-03-22 11:49

reporter   bugnote:0014391

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

2useven10

2016-03-22 11:54

developer   bugnote:0014392

Такое было, уже исправлено.
Какая у Вас версия фар?

2useven10

2016-03-22 11:57

developer   bugnote:0014394

Нужна версия >= 4556

zorinoleg

2016-03-22 11:57

reporter   bugnote:0014393

3.0.4585 x86

2useven10

2016-03-22 11:59

developer   bugnote:0014395

Last edited: 2016-03-22 12:02

View 2 revisions

я проверил на 4588 - никаких кавычек нет, путь с активной панели.
Macro {
  area="Shell"; key="CtrlIns"; flags="EmptyCommandLine NoPluginPanels";
  description="If CtrlIns was pressed while on .. and command line is empty then copy to clipboard the path of the current folder";
  action = function()
if APanel.Bof and not APanel.Selected and not APanel.Root then
  --Keys('F7 CtrlShift[ CtrlIns Esc')
  mf.clip(1, APanel.Path)
else
  Keys('CtrlIns')
end

  end;
}

zorinoleg

2016-03-22 12:19

reporter   bugnote:0014396

Спасибо, работает!

devourer66

2017-09-16 20:25

reporter   bugnote:0015596

Всем привет, верните пожалуйста поведение с ковычкой как было раньше, а именно чтобы ставилась посе слеша.

Вторая по значимости фича, которая держит меня на фаре это возможность снести полный путь к катологу в командную строку по ctrl+]
после этого обычно строка копируется к клипбод и вставляется в окно выбора пути к сохраняемому файлу в какой-либо программе, например excel.

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

Теперь же приходится "переносить" кавычку на правильное место, чтобы не ругалась винда.

2useven10

2017-09-16 21:13

developer   bugnote:0015597

Какой либо программе, например excel кавычки не нужны.
Вставляйте путь в клипбоард прямым способом - AltShiftIns.

Issue History

Date Modified Username Field Change
2015-06-19 08:44 tsvstar New Issue
2015-10-31 13:44 2useven10 Note Added: 0014031
2015-10-31 13:49 DrKnS Note Added: 0014033
2015-11-02 08:11 Smitis Note Added: 0014043
2015-11-02 11:09 2useven10 Note Added: 0014044
2015-11-02 13:19 2useven10 Note Edited: 0014044 View Revisions
2015-11-02 13:32 Smitis Note Added: 0014047
2015-11-02 16:16 Smitis Note Added: 0014050
2016-01-22 14:50 tsvstar Note Added: 0014233
2016-01-22 14:56 tsvstar Note Edited: 0014233 View Revisions
2016-01-22 14:58 tsvstar Note Edited: 0014233 View Revisions
2016-01-22 14:59 tsvstar Note Edited: 0014233 View Revisions
2016-01-26 14:15 2useven10 Note Added: 0014237
2016-01-26 14:15 2useven10 Assigned To => 2useven10
2016-01-26 14:15 2useven10 Status new => feedback
2016-01-28 20:47 DrKnS Note Added: 0014244
2016-01-28 22:19 2useven10 Note Added: 0014245
2016-01-29 08:07 Smitis Note Added: 0014246
2016-01-29 15:30 tsvstar Note Added: 0014247
2016-01-29 15:30 tsvstar Status feedback => assigned
2016-01-29 17:05 2useven10 Note Added: 0014248
2016-01-29 17:05 2useven10 Status assigned => feedback
2016-01-29 22:03 Smitis Note Added: 0014250
2016-01-30 14:48 DrKnS Note Added: 0014253
2016-01-30 15:42 Smitis Note Added: 0014254
2016-01-30 15:57 2useven10 Note Added: 0014255
2016-01-30 15:59 DrKnS Note Added: 0014256
2016-01-30 16:07 2useven10 Note Added: 0014257
2016-01-30 18:42 Smitis Note Added: 0014259
2016-01-30 18:54 DrKnS Note Added: 0014260
2016-01-31 09:23 2useven10 Note Edited: 0014255 View Revisions
2016-02-13 19:46 DrKnS Relationship added related to 0003178
2016-02-15 18:04 2useven10 Note Edited: 0014255 View Revisions
2016-02-21 14:09 Smitis Note Added: 0014331
2016-02-21 14:09 Smitis Note Edited: 0014331 View Revisions
2016-03-21 21:35 zorinoleg Note Added: 0014373
2016-03-21 23:23 2useven10 Note Added: 0014374
2016-03-21 23:29 2useven10 Note Added: 0014375
2016-03-21 23:43 2useven10 Note Added: 0014376
2016-03-22 09:32 zorinoleg Note Added: 0014377
2016-03-22 10:49 2useven10 Note Added: 0014379
2016-03-22 11:01 zorinoleg Note Added: 0014380
2016-03-22 11:07 zorinoleg Note Added: 0014381
2016-03-22 11:10 2useven10 Note Added: 0014382
2016-03-22 11:12 2useven10 Note Added: 0014383
2016-03-22 11:26 zorinoleg Note Added: 0014384
2016-03-22 11:29 zorinoleg Note Edited: 0014384 View Revisions
2016-03-22 11:30 zorinoleg Note Edited: 0014384 View Revisions
2016-03-22 11:33 2useven10 Note Added: 0014385
2016-03-22 11:37 2useven10 Note Added: 0014386
2016-03-22 11:39 2useven10 Note Added: 0014387
2016-03-22 11:40 2useven10 Note Edited: 0014387 View Revisions
2016-03-22 11:43 zorinoleg Note Added: 0014388
2016-03-22 11:45 2useven10 Note Added: 0014389
2016-03-22 11:47 2useven10 Note Added: 0014390
2016-03-22 11:49 zorinoleg Note Added: 0014391
2016-03-22 11:54 2useven10 Note Added: 0014392
2016-03-22 11:57 2useven10 Relationship added related to 0003198
2016-03-22 11:57 zorinoleg Note Added: 0014393
2016-03-22 11:57 2useven10 Note Added: 0014394
2016-03-22 11:59 2useven10 Note Added: 0014395
2016-03-22 12:02 2useven10 Note Edited: 0014395 View Revisions
2016-03-22 12:19 zorinoleg Note Added: 0014396
2016-03-22 16:35 2useven10 Note Edited: 0014386 View Revisions
2016-03-24 12:52 2useven10 Relationship added related to 0003200
2016-04-06 12:18 2useven10 Relationship added parent of 0003211
2017-09-16 20:25 devourer66 Note Added: 0015596
2017-09-16 21:13 2useven10 Note Added: 0015597
2017-11-01 02:01 DrKnS Status feedback => closed
2017-11-01 02:01 DrKnS Resolution open => no change required
2017-11-01 02:01 DrKnS Build => 0
2019-02-19 13:11 2useven10 Relationship added related to 0003700