View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003011 | Far Manager | Command Line/Execute | public | 2015-06-19 05:44 | 2019-10-11 12:55 |
Reporter | tsvstar | Assigned To | 2useven10 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | won't fix | ||
Summary | 0003011: Ctrl+Enter works wrong for ".." for case if path have spaces | ||||
Description | If 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 | ||||
Tags | No tags attached. | ||||
Build | 0 | ||||
parent of | 0003211 | closed | 2useven10 | Far Manager | лишний "\" при вставке пути из панели |
related to | 0003178 | closed | Far Manager | Неверное расположение завершающей двойной кавычки (") при получении полного пути к папке | |
related to | 0003198 | closed | 2useven10 | Known Error | Неверная вставка текущей папки |
related to | 0003200 | closed | 2useven10 | Far Manager | Неоднообразное поведение по Ctrl+F на "нормальной папке" и на ".." |
related to | 0003700 | closed | DrKnS | Far Manager | Ctrl+enter in panel returns bad path: backslash out of quotes |
|
Зачем там вообще хвостовой слеш? Надо либо убрать его либо подставлять "D:\Path Name"\ |
|
Зачем там вообще полный путь? |
|
Несколько лет назад на форуме уже всплывало. То, как интерпретируется \" зависит исключительно от программы и ФАР здесь не причём. |
|
Интерпретация это отдельный вопрос. Речь о том, что поведение для ".." отличается от остальных случаев. Нормально подставляется только имя файла/каталога без "\" Слеш нужен в одном случае - при попадании в корень диска, его можно отдельно обработать. Насчёт полного пути, я бы оставил, иногда удобно. |
|
Тогда надо подставлять .. и дело с концом, будет одинаково во всех случаях, что видим на экране, то и подставляется, без проявления ИИ. |
|
К слову о сабже > 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 |
|
Конкретный сценарий использования в котором я наткнулся и зарепортил проблему: У меня есть несколько python-скриптов и C++ прог (скомпиленых в CodeBlocks) для разного рода пакетной обработки файлов. На вход надо подать путь к директории для обработки и задать ключи обработки. И в описанном случае получается полный бред. И python и C-проги в описанном случае все ключи после пути включают в путь(собственно исходя из синтаксиса экранирования так и должно быть). Делать вставку ".." считаю неправильным. Это удаляет функционал а не исправляет его. Ведь альтернативных путей снести полный путь в командную строку не существует. Замыкающий слэш не нужен. Собственно об этом и написал. Да вполне возможно это зависит от интерпретирующей программы. И да в винде двойная кавычка не может присутствовать в имени файла, так что в принципе можно вполне надёжно распарсить этот момент. Но вот я привёл конкретные примеры некорректной интерпретации на ровном месте. CPython и простой пример int main(argc, argv) { printf('%d',argc); } скомпиленный в CodeBlocks. И единственный способ получить нормальное разбиение там - это вручную получать полную строку из винды и парсить самому с учётом такого вот особого случая. Нереально костыльно. Так почему бы тогда не убрать камень преткновения если это ничему не мешает? |
|
4521 "D:\Path Name"\ |
|
> Ведь альтернативных путей снести полный путь в командную строку не существует. Справку, я так понимаю, вы не читали? Там этих путей, как у дурака фантиков. > 4521 Я в курсе, что тикет о Ctrl-Enter, который реализован через Ctrl-F, и что локальные фиксы это так здорово, но есть же и Ctrl-[ всякие. |
|
Есть всякие, да. Честно говоря, об этом не думал. Но я и для Ctrl-Enter не уверен, что так правильно. Сделал, чтобы оживить тему и получить фидбэк. |
|
Я сталкивался с разборщиками комстроки, которые не понимали кавычки внутри параметра, т.е. параметр должен быть ПОЛНОСТЬЮ в кавычках, "D:\Path Name"\ интерпретировался бы как ДВА параметра. |
|
Ctrl+F и Ctrl+[ дают тот же эффект. Слеш прямо перед финальной кавычкой как есть сноска полного пути предполагает что это отдельный параметр (ибо сразу за ним ставится пробел). И если нам нужен полный путь не к директории а к файлу - то в любом случае прийдется идти внутрь кавычек и добавлять там файл. Вот только то что при отстутсвии хвостового слеша его тогда надо будет в этом случае добавить - очевидно, то то что снесенный путь директории может интерпретироваться по-разному - совсем не очевидно. Даже наткнувшись на эту проблему - я периодически забываю и удивляюсь почему проги отказываются запускаться. |
|
@Smitis можно конкретнее? Продолжаем трясти дерево... 4523 "D:\Path Name"\ - очень глобально. Перенесено в QuoteSpace(). Теперь так везде, в том числе и в Plugin API. |
|
> можно конкретнее? А что именно конкретней? Некоторые программы воспримут C:\"Program Files"\"Common Files"\"Microsoft Shared" как один параметр C:\Program Files\Common Files\Microsoft Shared, а некоторые попытаются разбить на несколько (аж на четыре). Соответственно, "C:\Program Files\Common Files\Microsoft Shared"\ будет два параметра Таких программ мало, но они попадаются. Данная проблема не имеет универсального решения в принципе. Либо в корне диска будет не так, либо \ как экранирующий символ перед кавычками воспримется, либо разбивка на параметры будет не так. > собственно исходя из синтаксиса экранирования так и должно быть Само по себе ТАКОЕ использование экранирующего символа уже бред, но какой идиот это придумал (ещё под ДОС) уже не найти. |
|
Может, действительно, просто не пихать туда слеш? Точнее, пихать только тогда, когда это корень. |
|
> Точнее, пихать только тогда, когда это корень. Тогда возникает неоднозначность, потребуются дополнительные проверки. Из меню (а ведь там таже ситуация) проверки сделать трудно, потребуется дополнительная "обвязка" в виде командных файлов и т.п. Я над этим думал, когда делал утилиту, в которой надо было выставлять пути через переменные среды. Так плохо для одних программ, по-другому плохо для других... :mad: Может лучше саломоново решение - параметр в настройках, а там каждый выставит так, как ему ближе к сердцу? |
|
> А что именно конкретней? Назовите этих редких героев. У меня такое впечатление, что они, как Неуловимый Джон, никому не нужны. > Может, действительно, просто не пихать туда слеш? Слеш удобен, когда предполагается продолжение ввода имени. В противном случае, его придётся вбивать руками. Для Сtrl-Enter, у которого добавляется пробел, т.е. ввод имени вроде бы завершён, он действительно не нужен. А для Ctrl-[, Ctrl-] - вполне полезен. Все программы, которыми я пользуюсь, cmd-shell и, насколько я помню, стандартный парсер комстроки сишной библиотеки без проблем принимают слеш после кавычек. |
|
> Может лучше саломоново решение - параметр в настройках, а там каждый выставит так, как ему ближе к сердцу? Every time you provide an option, you're asking the user to make a decision |
|
Я бы подождал недельку-другую, чтобы посмотреть на реакцию. Если действительно кому-то будет мешать, тогда ввести настройку. |
|
2 DrKnS Я читал эту статью, даже на русском. Здесь немного не то - не надо выбирать КАЖДЫЙ раз, выбрать ОДИН раз и забыть. |
|
Я к тому, что опции на такие мелочи - это перебор. Надо определиться с наиболее совместимым поведением, а любители экзотических программ могут слеш и макросом добавить/убрать/передвинуть. |
|
Посмотрел, сколько кнопкосочетаний надо намакросить на предмет "вернуть прежнее поведение". Получилось 15 плюс несколько собственных зависимых макросов. Может, всё-таки лучше настройку, например, флаг в System.QuotedName управляющий поведением размещения \ до кавычек или после? |
|
Если так задумано в новых версиях, подскажите как можно сделать как было? Конкретно интересует как заставить макрос работать с результатом как было в старых версиях? |
|
ShiftAltIns делает всё что нужно. Т.е. action = function() Keys 'ShiftAltIns' end; |
|
Правда без кавычек и \ Добавить несложно. |
|
Но, пожалуй, я не понял что должен делать ваш макрос. |
|
По последовательности нажатых клавиш видно что он делает: заменяет просто CtrlIns на F7 -> CtrlShift[ -> CtrlIns -> Esc |
|
Чем мешает слеш после кавычек? Где Вы используете потом содержимое клипборда? |
|
в диалоговых окнах windows например: При сохранении какого либо файла в приложении просто вставляю и все. Перед кавычками норм. А если будет за кавычками то будет ошибка о неверном пути. Столько лет пользуюсь FAR и не было необходимости в слеш за кавычками. На макрос не знаю как создать условие отслеживания этого слэша, так как кавычки со слэшем появляются только тогда когда имя превышает 8 символов. Если длина имени не превышает то нет ни кавычек ни слэша. |
|
ShiftAltIns ни чего не происходит после нажатия что за комбинация такая? |
|
Можно подробнее - как Вы получаете 'ошибку о неверном пути'. Простейший способ mf.clip(1, '"'..APanel.Path..'\\"') -- всегда с кавычками. |
|
AltShiftIns - полный путь в клипборд. |
|
Например в диалоговом окне сохранения файла вставляем: "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\" то произойдет переход в папку |
|
Если вы потом добавляете к пути имя файла, то в диалоговых окнах путь лучше вообще без кавычек. Например, для 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 |
|
Студия по пути без кавычек и без слеша, с пробелами - нормально меняет каталог. |
|
Так что достаточно: mf.clip(1, APanel.Path) или просто AltShiftIns |
|
Имя файла мне не надо подставлять. Куда прописать этот код? |
|
код вместо вашего Keys('F7 CtrlShift[ CtrlIns Esc') |
|
AltShiftIns на ".." вставит в буфер текущий каталог панели. |
|
После замены в макросе как вы предложили, копируется путь со слэшем после кавычек, и всегда именно с правой панели а не с активной. |
|
Такое было, уже исправлено. Какая у Вас версия фар? |
|
3.0.4585 x86 |
|
Нужна версия >= 4556 |
|
я проверил на 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; } |
|
Спасибо, работает! |
|
Всем привет, верните пожалуйста поведение с ковычкой как было раньше, а именно чтобы ставилась посе слеша. Вторая по значимости фича, которая держит меня на фаре это возможность снести полный путь к катологу в командную строку по ctrl+] после этого обычно строка копируется к клипбод и вставляется в окно выбора пути к сохраняемому файлу в какой-либо программе, например excel. Как вы понимаете, это здорово экономит время если нужно сохранить файл в каталог с глубокой вложенностью. Теперь же приходится "переносить" кавычку на правильное место, чтобы не ругалась винда. |
|
Какой либо программе, например excel кавычки не нужны. Вставляйте путь в клипбоард прямым способом - AltShiftIns. |
|
This change literally opened a can of worms. The original behaviour (pre-4521, backslash-within-quotes, "path\") was there for 20 years and didn't cause much trouble (except for this particular ticket). 5486 - everything is reverted. |
Date Modified | Username | Field | Change |
---|---|---|---|
2015-06-19 05:44 | tsvstar | New Issue | |
2015-10-31 10:44 | 2useven10 | Note Added: 0014031 | |
2015-10-31 10:49 | DrKnS | Note Added: 0014033 | |
2015-11-02 05:11 | Smitis | Note Added: 0014043 | |
2015-11-02 08:09 | 2useven10 | Note Added: 0014044 | |
2015-11-02 10:19 | 2useven10 | Note Edited: 0014044 | |
2015-11-02 10:32 | Smitis | Note Added: 0014047 | |
2015-11-02 13:16 | Smitis | Note Added: 0014050 | |
2016-01-22 11:50 | tsvstar | Note Added: 0014233 | |
2016-01-22 11:56 | tsvstar | Note Edited: 0014233 | |
2016-01-22 11:58 | tsvstar | Note Edited: 0014233 | |
2016-01-22 11:59 | tsvstar | Note Edited: 0014233 | |
2016-01-26 11:15 | 2useven10 | Note Added: 0014237 | |
2016-01-26 11:15 | 2useven10 | Assigned To | => 2useven10 |
2016-01-26 11:15 | 2useven10 | Status | new => feedback |
2016-01-28 17:47 | DrKnS | Note Added: 0014244 | |
2016-01-28 19:19 | 2useven10 | Note Added: 0014245 | |
2016-01-29 05:07 | Smitis | Note Added: 0014246 | |
2016-01-29 12:30 | tsvstar | Note Added: 0014247 | |
2016-01-29 12:30 | tsvstar | Status | feedback => assigned |
2016-01-29 14:05 | 2useven10 | Note Added: 0014248 | |
2016-01-29 14:05 | 2useven10 | Status | assigned => feedback |
2016-01-29 19:03 | Smitis | Note Added: 0014250 | |
2016-01-30 11:48 | DrKnS | Note Added: 0014253 | |
2016-01-30 12:42 | Smitis | Note Added: 0014254 | |
2016-01-30 12:57 | 2useven10 | Note Added: 0014255 | |
2016-01-30 12:59 | DrKnS | Note Added: 0014256 | |
2016-01-30 13:07 | 2useven10 | Note Added: 0014257 | |
2016-01-30 15:42 | Smitis | Note Added: 0014259 | |
2016-01-30 15:54 | DrKnS | Note Added: 0014260 | |
2016-01-31 06:23 | 2useven10 | Note Edited: 0014255 | |
2016-02-13 16:46 | DrKnS | Relationship added | related to 0003178 |
2016-02-15 15:04 | 2useven10 | Note Edited: 0014255 | |
2016-02-21 11:09 | Smitis | Note Added: 0014331 | |
2016-02-21 11:09 | Smitis | Note Edited: 0014331 | |
2016-03-21 18:35 | zorinoleg | Note Added: 0014373 | |
2016-03-21 20:23 | 2useven10 | Note Added: 0014374 | |
2016-03-21 20:29 | 2useven10 | Note Added: 0014375 | |
2016-03-21 20:43 | 2useven10 | Note Added: 0014376 | |
2016-03-22 06:32 | zorinoleg | Note Added: 0014377 | |
2016-03-22 07:49 | 2useven10 | Note Added: 0014379 | |
2016-03-22 08:01 | zorinoleg | Note Added: 0014380 | |
2016-03-22 08:07 | zorinoleg | Note Added: 0014381 | |
2016-03-22 08:10 | 2useven10 | Note Added: 0014382 | |
2016-03-22 08:12 | 2useven10 | Note Added: 0014383 | |
2016-03-22 08:26 | zorinoleg | Note Added: 0014384 | |
2016-03-22 08:29 | zorinoleg | Note Edited: 0014384 | |
2016-03-22 08:30 | zorinoleg | Note Edited: 0014384 | |
2016-03-22 08:33 | 2useven10 | Note Added: 0014385 | |
2016-03-22 08:37 | 2useven10 | Note Added: 0014386 | |
2016-03-22 08:39 | 2useven10 | Note Added: 0014387 | |
2016-03-22 08:40 | 2useven10 | Note Edited: 0014387 | |
2016-03-22 08:43 | zorinoleg | Note Added: 0014388 | |
2016-03-22 08:45 | 2useven10 | Note Added: 0014389 | |
2016-03-22 08:47 | 2useven10 | Note Added: 0014390 | |
2016-03-22 08:49 | zorinoleg | Note Added: 0014391 | |
2016-03-22 08:54 | 2useven10 | Note Added: 0014392 | |
2016-03-22 08:57 | 2useven10 | Relationship added | related to 0003198 |
2016-03-22 08:57 | zorinoleg | Note Added: 0014393 | |
2016-03-22 08:57 | 2useven10 | Note Added: 0014394 | |
2016-03-22 08:59 | 2useven10 | Note Added: 0014395 | |
2016-03-22 09:02 | 2useven10 | Note Edited: 0014395 | |
2016-03-22 09:19 | zorinoleg | Note Added: 0014396 | |
2016-03-22 13:35 | 2useven10 | Note Edited: 0014386 | |
2016-03-24 09:52 | 2useven10 | Relationship added | related to 0003200 |
2016-04-06 09:18 | 2useven10 | Relationship added | parent of 0003211 |
2017-09-16 17:25 | devourer66 | Note Added: 0015596 | |
2017-09-16 18:13 | 2useven10 | Note Added: 0015597 | |
2017-10-31 23:01 | DrKnS | Status | feedback => closed |
2017-10-31 23:01 | DrKnS | Resolution | open => no change required |
2017-10-31 23:01 | DrKnS | Build | => 0 |
2019-02-19 10:11 | 2useven10 | Relationship added | related to 0003700 |
2019-10-11 12:50 | DrKnS | Resolution | no change required => won't fix |
2019-10-11 12:55 | DrKnS | Note Added: 0016616 |