View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000281 | Wishes | _Common | public | 2007-04-27 21:34 | 2018-11-01 13:30 |
Reporter | Zuz | Assigned To | 2useven10 | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | new | Resolution | open | ||
Product Version | 1.71 | ||||
Summary | 0000281: Автоподстановка переменных среды не позволяет работать с путями вида C:\%AppData% | ||||
Description | 1. В диалоге копирования файлов/папок, в диалоге переноса/переименования файлов/папок, в диалоге создания папок, в диалоге открытия файла в редакторе, в командной строке FAR (CD, CHDIR, SET и что там ещё он сам умеет), метасимволы, ссылки на папки (ПравыйCtrl+цифра), настройки где есть указания на путь типа пути к персональным плагинам не позволяют экранировать строки в пути вида %AppData% и в случае, если переменная среды определена, то провети требуемую операцию не возможно. Для решения это проблемы предлагается TI, включенное по умолчанию, отключающее подстановку переменных среды, в случае же, когда TI отключено, то допустима и подстановка и экранирование % символом ^, как это сделано в штатном командном процессоре (сmd.exe). Дополнительно появляется некоторый интеллект в диалогах, когда TI отключено, например в диалоге копирования файла (для определенности пример)в каталог "C:\%AppData%" в диалоге копирования должно быть "C:\^%AppData^%". Правда, в этом случае вылазит проблема с удвоением ^, т.к. возникают проблемы с созданием папок вида "C:\^%AppData^%". 2. Для сведения в сmd.exe сделано вот так: C:\>echo C:\%AppData% C:\C:\Documents and Settings\AuzinYV\Application Data C:\>echo C:\^%AppData^% C:\%AppData% C:\>echo "C:\^%AppData^%" "C:\^%AppData^%" C:\>echo C:\^%AppData^%\ ^^ C:\%AppData%\ ^ C:\>echo "C:\^%AppData^%\ ^^" "C:\^%AppData^%\ ^^" Т.е. по аналогии можно предложить такой вариант реализации, если путь заключен в двойные кавычки, то делаем подстановку переменных среды, иначе реализуем повоедения с экранированием % символом ^. 3. TI вообще нужно для того, чтобы плагины могли тоже его использовать и соответсвующим образом себя вести. P.S. Вообще проблема несколько надумана, но чтоб не забыть записал сие. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Родственное обсуждение и УЖЕ работающий способ экранирования тут: http://forum.farmanager.com/viewtopic.php?p=35833#p35833 |
|
До кучи: исходная тема http://forum.farmanager.com/viewtopic.php?f=9&t=2616 |
|
>УЖЕ работающий способ экранирования Если принять этот способ за решение, то необходимо его описать в хелпе. И главное: при попытке скопировать что-то в такую папку фар САМ должен экранировать имя. |
|
Очередной виток http://forum.farmanager.com/viewtopic.php?p=104409#p104409 |
|
Предлагаю добавить небольшой ИИ: Если имя папки назначения в диалоге копирования/перемещения не изменено, т.е. совпадает с каталогом пассивной панели - не делать подстановку. На мой взгляд, это больше 90% обломов. В остальном использование кавычки, можно считать приемлемым решением. |
|
>Предлагаю добавить небольшой ИИ: Лучше немного иначе: если папка совпадающая с именем переменной существует, то не разворачивать. Это покроет дополнительно ещё 5% обломов. Возможно для таких случаев нужно особое подтверждение. >В остальном использование кавычки, можно считать приемлемым решением. Не согласен, т.к. это неочевидно, недокументировано, и после очередного рефакторинга работать перестанет. В идеале нужен способ, позволяющий пользователю явно сообщить о своих намерениях. Например специальный чекбокс (и надо ещё подумать каково должно быть его умолчательное состояние, и должно ли это состояние запоминаться при изменении, и если да, то навсегда, или только на текущий сеанс) Другой вариант: специальная кнопка, явно разворащивающая переменные. |
|
Не лучше. И не очевидно. Существовать могут обе папки, а решать за пользователя, в какую из существующих папок надо копировать файлы я бы не стал. В предлагаемом варианте, если пользователь не изменил папку назначения, то понятно что он хотел сделать. Про идеал не знаю, речь идёт о приемлемом разумном варианте. |
|
4408 |
|
Имхо прозрачнее чекбокс "[x] разворачивать переменные", но тогда его придётся добавить во все диалоги с путями FS. Если пользователю потребуется выборочное экранирование, то он может использовать двойные кавычки как сейчас. Состояние чекбокса по умолчанию - разворачивание включено (cmd так делает, плюс исторически так сложилось). АИ. > В предлагаемом варианте, если пользователь не изменил папку назначения, то понятно что он хотел сделать. - Не факт. Пользователь может распаковывать чужой архив, и что там хотел его создатель - не известно. |
|
AleXH >но тогда его придётся добавить во все диалоги с путями FS Или завести общий параметр, доступный макросам >Не факт. Имеется ввиду случай, когда путь с "%" открыт на целевой панели. > Пользователь может распаковывать чужой архив[...] А сейчас что происходит в этих случаях? Имхо, если папка в архиве содержит %, то разворачивать нельзя |
|
2useven10 >Существовать могут обе папки, а решать за пользователя, в какую из существующих папок надо копировать файлы я бы не стал. Согласен. Предлагаю в этом случае предлагать пользователю выбор. Т.е.: если путь в строке редактирования изменён, и существуют обе папки, то требовать подтверждения. Кроме того, предлагаю добавить в ИИ ещё одно правило: если развёрнутый путь получается невалидным (например содержит в середине ":\"), то не просто выдавать ошибку, а предлагать распаковать в "неразвёрнутом" виде. (или же без подтверждений делать это по умолчанию) |
|
>Т.е.: если путь в строке редактирования изменён, и существуют обе папки, то требовать подтверждения. А если существует одна, а я ХОЧУ создать другую? Сейчас правила достаточно просты. Для сложных случаев есть магическая кавычка. Излишний ИИ может создать очень неочевидные проблемы. > Кроме того, предлагаю добавить в ИИ ещё одно правило... Может быть. Но тут тоже могут быть сюрпризы. Сейчас (и с Вашими предложениями тоже) альтернатив всего 2 - разворачивать переменные или нет. А если переменных в пути 2 (3, ...) ? |
|
> Излишний ИИ может создать очень неочевидные проблемы. ИИ был изначально: если есть переменная, то пытаемся развернуть. И излишняя простота этого ИИ создавала в некоторых случаях проблемы. Вы добавили разумное правило, усложнив ИИ, но уменьшив вероятность проблем. Добавляя новые правила, пытаясь покрыть больше случаев, мы усложняем ИИ, безусловно. >А если переменных в пути 2 (3, ...) ? Хороший вопрос, надо подумать. |
|
>А если переменных в пути 2 (3, ...) ? Валидный путь с точки зрения FS после разворота переменных и стоит галка разворачивать - разворачиваем, не валидный - выдаём соответствующий диалог с чекбоксом "[ ] запомнить выбор" и кнопками "не разворачивать все", "не разворачивать отмеченные", "Отмена". Отмеченные это те, которые отмечены двойной кавычкой (пример %"AppData%). |
|
AleXH Ситуация когда переменных более 1 на мой взгляд слишком нетипична, чтобы наворачивать такой интерфейс. Имхо, никак особо обрабатывать такой случай не стоит. |
|
@JohnDoe Вот с этим согласен на 100%. Даже с 1 переменной ситуация не слишком частая. Меня как пользователя текущий вариант вполне устраивает. Дополнение с проверкой невалидного пути может быть можно сделать, но оно тоже неоднозначно, и (главное) у меня нет мотивации его реализовывать. Единственное, что необходимо сделать - это решить где и как легализовать трюк с кавычкой в документации. |
|
>решить где и как легализовать трюк с кавычкой в документации. Трюк по определению нельзя легализовать. Предлагаю найти честный путь. Если не хочется городить интерфейс, то может макросами? http://forum.farmanager.com/viewtopic.php?f=15&t=9778 |
|
В идеале поле ввода с флагом DIF_EDITEXPAND могло бы иметь дополнительный встроенный элемент управления, позволяющий отключить разворачивание переменных. Если без этого, то можно использовать макрос постом выше. Для его нормальной работы в диалоге копирования предлагаю внести небольшое изменение. В настоящий момент поле с назначением анализируется после закрытия диалога. Предлагаю вернуть в поле DIF_EDITEXPAND, и перенести анализ его содержимого в обработчик диалога (DN_CLOSE): если путь не менялся пользователем, то снимать флаг DIF_EDITEXPAND. Таким образом само поведение диалога не изменится, зато появится возможность влиять на него извне, макросом. |
Date Modified | Username | Field | Change |
---|---|---|---|
2007-04-27 21:34 | Zuz | New Issue | |
2008-06-29 03:20 | alexy | Project | Far Manager 1.7x => Known Error |
2008-10-13 03:18 | HaRT | Note Added: 0001881 | |
2010-09-29 09:06 | JohnDoe | Note Added: 0005850 | |
2010-09-29 09:08 | JohnDoe | Note Added: 0005851 | |
2013-02-24 15:07 | JohnDoe | Note Added: 0010387 | |
2015-08-14 08:22 | 2useven10 | Relationship added | has duplicate 0003057 |
2015-08-14 08:28 | 2useven10 | Note Added: 0013764 | |
2015-08-14 17:25 | JohnDoe | Note Added: 0013767 | |
2015-08-14 18:02 | 2useven10 | Note Added: 0013768 | |
2015-08-14 21:28 | 2useven10 | Note Added: 0013771 | |
2015-08-14 21:28 | 2useven10 | Assigned To | => 2useven10 |
2015-08-14 21:28 | 2useven10 | Status | new => feedback |
2015-08-15 15:05 | AleXH | Note Added: 0013772 | |
2015-08-16 08:05 | JohnDoe | Note Added: 0013773 | |
2015-08-16 08:06 | JohnDoe | Note Edited: 0013773 | |
2015-08-16 08:20 | JohnDoe | Note Added: 0013774 | |
2015-08-16 16:23 | 2useven10 | Note Added: 0013775 | |
2015-08-16 16:35 | JohnDoe | Note Added: 0013776 | |
2015-08-17 07:05 | AleXH | Note Added: 0013778 | |
2015-08-17 07:07 | AleXH | Note Edited: 0013778 | |
2015-08-17 07:12 | AleXH | Note Edited: 0013778 | |
2015-08-17 14:11 | JohnDoe | Note Added: 0013783 | |
2015-08-17 20:11 | 2useven10 | Note Added: 0013789 | |
2015-08-17 20:36 | JohnDoe | Note Added: 0013790 | |
2015-08-17 21:15 | JohnDoe | Note Edited: 0013790 | |
2017-10-31 12:49 | JohnDoe | Note Added: 0015775 | |
2017-10-31 12:50 | JohnDoe | Note Edited: 0015775 | |
2017-10-31 12:52 | JohnDoe | Note Edited: 0015775 | |
2017-10-31 12:53 | JohnDoe | Project | Known Error => Wishes |
2018-11-01 13:30 | JohnDoe | Status | feedback => new |