View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001681 | Far Manager | Macro | public | 2011-01-19 19:54 | 2017-12-01 16:36 |
Reporter | Raistlin | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | assigned | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Summary | 0001681: panel.setpath() не работает с плагинами | ||||
Description | Например, если запустили RegistryBrowser: macro:post panel.setpath(0,"HKEY_CURRENT_USER\\Console") возвращает ошибку, хотя cd HKEY_CURRENT_USER\Console работает. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
в двойке это точно не решим, а вот для тройки надо подумать решение... |
|
так, попробуем :-) (все так же на основе 1807) идем в macro.cpp, функция panelsetpathFunc() и меняем if (SelPanel->SetCurDir(pathName,TRUE)) на if (SelPanel->SetCurDir(pathName,FALSE)) И вот тут как раз нужно протестить на предмет "а что отвалилось в "panel.setpath()" ;-)) |
|
|
|
Отвалилось. Переход в обычные папки по panel.setpath() работает, пока не попробовали перейти по нему в ключ реестра, - после этого получаем ошибки "The system cannot find the file specified." |
|
давай пример последовательности для воспроизведения. |
|
Пардон. Не отвалилось. Забыл обратно панель на файловую поменять. |
|
Есть вот такое предложение: Если второй аргумент pathName относительный путь, то пытаемся выставить этот путь на указанной панели. Если путь абсолютный (C:\... или \\server\share...), то выставляем этот путь, закрывая плагиновую панель (если она была). Хотя, я бы оставил как есть и вот почему: дабы не усложнять жисть. Т.е. функция должна только меняет путь на панели, не вызывая никаких плагинов. Если такого пути не находится, то отлуп. Если нужно перейти по пути на панели какого-нить плагина - вызови сначала плагин, а потом меняй путь. Так будет подконтрольней... ы? |
|
А вот расскажите как же нам теперь при открытой плагиновой панели перейти на файловую? Как вариант: отдельный флаг включающий обработку плагиновых панелей. |
|
> Если путь абсолютный (C:\... или \\server\share...), то выставляем этот путь, закрывая плагиновую панель (если она была). > Если нужно перейти по пути на панели какого-нить плагина - вызови сначала плагин, а потом меняй путь. Взаимоисключающие параграфы? Чтобы перейти куда-то внутри плагина, надо будет в него по-любому перейти. А вот уходить из плагина по абсолютному пути - это было бы удобно, потому что иначе замусоривается история. Вот если бы был механизм временной блокировки истории, тогда такое усложнение было бы точно ни к чему. Поиском вроде не нашел, добавить виш? |
|
> как же нам теперь при открытой плагиновой панели перейти на файловую Да, действительно. Причем таким вот способом: macro:post CtrlBackSlash CtrlPgUp или (undocumented?) macro:post CtrlBackSlash CtrlBackSlash из Network Browser, например, почему-то не выйти. Можно, конечно, костылями (с запоминанием содержимого комстроки): Esc print("cd "+env("SystemRoot")) Enter Но история замусоривается. Голосую за отдельный флаг в таком виде: panel.setpath(panelType,path[,filename[,InFilePanel]]) Но только чтобы переваривался такой вариант: panel.setpath(0,"C:\\WINDOWS",,1) Без флага плохо, т. к. были ведь какие-то плагины для входа в результат DIR - внутри такого плагина, возможно, тоже может быть путь C:\WINDOWS. |
|
ок, тогда все остается по прежнему, за исключением того, что для относительного пути (в пределах "этой файловой системы") закрытие плагина не предполагается. (собстна закрытие плагина и привело к этому тикету :-)) |
|
не нравится мне "и еще один параметр". лучше добавить panel.setvpath(), по аналогии с CD и CHDIR - т.е. panel.setvpath() - это CD (в пределах "этой FS"), а panel.setpath - это CHDIR |
|
>т.е. panel.setvpath() - это CD (в пределах "этой FS") Если проводить полную аналогию, то в случае когда путь на текущей панели не найден, то он должен искаться в реальной ФС. Не уверен что это хорошо. |
|
это аналогия была |
|
Мне кажется, лучше лишний параметр, чем лишняя функция. Если макрос должен работать и в виртуальной, и в реальной FS, то при лишнем параметре мы меняем только его значение, а при лишней функции - пишем кусок макроса заново. |
|
>при лишнем параметре мы меняем только его значение, а при лишней функции - пишем кусок макроса заново. Добавить в имя 1 букву ещё легче чем параметр. Я за отдельную функцию. >это аналогия была Аналогия предполагает именно аналогию. Если что-то "не аналогично", то надо это оговорить явно. Я лично пока не знаю как лучше. |
|
> Добавить в имя 1 букву ещё легче чем параметр. А можно пример? Как, скажем, превратить panel.setpos в panel.setposidx? |
|
Тут 3 буквы, что дела не меняет. И мне почему-то казалось что мы рассматриваем совсем другую пару: panel.setpath()/panel.setVpath() |
|
Я про то, что имя функции нельзя брать из переменной, а значит, кусок кода надо будет писать дважды. |
|
Теперь идея понятна. Но всё равно с трудом представляю как вы практически собираетесь это использовать. В цикле? P.S. Отдельная функция лучше в плане простоты: документация проще, а значит проще применять, и потом легче читать код. |
|
Мне не нравится не столько отдельная функция, сколько то, что более востребованный вариант (а им, очевидно, будет именно panel.setvpath() - как более универсальный) имеет более длинное и неочевидное в написании имя, чем менее востребованный. Сравните CD и CHDIR. Мне кажется, panel.setpath() и panel.setfspath() смотрелись бы лучше. |
|
build 1946 Относительные пути - в рамках текущей FS Абс.пути (C:\ \\Server\share) закрывают плагиновую панель (если это была она) |
|
>Абс.пути (C:\ \\Server\share) закрывают плагиновую панель (если это была она) Ну а как же с панелями типа NTFS File Information? Закрывать её как-то совсем не в тему. |
|
а это тема совершенно друго тикета... JohnDoe, заведи один большой тикет с сабжем "все пропало, все плохо" - и там давай _ВСЕ_ проблемы современности решать :-( |
|
>а это тема совершенно друго тикета... Это с какого момента вдруг? Не я создал тикет, но смотрим: "0001681: panel.setpath() не работает с плагинами" Предлагаемое в 1946 решает эту проблему только частично, о чём я и сообщил. |
|
так на чем останавливаемся? добавляем необязательный четвертый параметр? E=panel.setpath(panelType,path[,filename[,realpath]]) |
|
Если так, то пусть будет три возможных значения realpath: 1 - реальный путь 0 - плагиновый путь -1 (или не указан) - авто, т.е. то что предлагается в build 1946 |
|
про "-1" спрошу твоим же вопросом: "Ну а как же с панелями типа NTFS File Information?" (и в догонку ту даже плагин ls-lr) |
|
Не понимаю, зачем три значения-то? По умолчанию (0) - текущая FS, 1 - реальная FS. |
|
> 1 - реальный путь > 0 - плагиновый путь > -1 (или не указан) - авто, т.е. то что предлагается в build 1946 Непонятно, что должно происходить при 0, если на панели сейчас реальная FS. |
|
>про "-1" спрошу твоим же вопросом: Ну так для этих панелей надо явно указать 0. Для большинства же можно будет ничего не указывать. Для меня это пока всё чисто умозрительно. Возможно лучше сделать отдельную функцию... |
|
>Непонятно, что должно происходить при 0, если на панели сейчас реальная FS. Ошибку должно выдавать. |
|
setpath при встрече абс пути отработает с физикой, а setVpath - в пределах текущей FS. так? |
|
> setpath при встрече абс пути отработает с физикой, а setVpath - в пределах текущей FS. лучше по аналогии с [panel].<fattr|fexist> fattr - работает всегда с реальной фс. panel.fattr - работает всегда с панелью. если на панели реальная фс - функции равнозначны. |
|
>> Непонятно, что должно происходить при 0, если на панели сейчас реальная FS. > Ошибку должно выдавать. Что явно говорит о том, что это значение лишнее. > setpath при встрече абс пути отработает с физикой, а setVpath - в пределах текущей FS. Я позволю себе повторить свое соображение по этому поводу: http://bugs.farmanager.com/view.php?id=1681#c6689 |
|
>Что явно говорит о том, что это значение лишнее. Это не так, поскольку есть большая разница между 0 и -1 |
|
Если вместо "плагинового пути" использовать "путь в текущей файловой системе", то разница исчезает. А не использовать смысла нет, коль на реальной FS "плагиновый путь" возвращает ошибку. Это, по-моему, вполне очевидно. Я все-таки за параметр, а не за доп. функцию: он не ломает текущее поведение и не загромождает язык. |
|
А мне нравится вариант DrKnS. |
|
Можно и так. |
|
>А не использовать смысла нет, коль на реальной FS "плагиновый путь" возвращает ошибку. Смысл в 0 очень даже есть, т.к. на плагиновой панели могут быть пути похожие на реальные, и в случае ошибки хотелось бы её обработать, а не закрывать панель. >А мне нравится вариант DrKnS. >>Можно и так. А разве Skirda не то же самое предлагал выше (http://bugs.farmanager.com/view.php?id=1681#c6675)? |
|
тоже самое, только DrKnS правильнее выразился :-) |
|
Что если при попытке Panel.Setpath на панели такого пути не найдено? Ошибка, или пытаемся искать в реальной FS? (Предлагаю не искать) И не совсем по тикету, но где-то рядом: очень хотелось бы иметь возможность закрыть активную плагиновую панель и вывалиться в предыдущую (потенциально тоже плагиновую). Ведь не всякий плагин закрывается по "..". |
|
Однозначно - не искать. > очень хотелось бы иметь возможность закрыть активную плагиновую панель и вывалиться в предыдущую Виш за тобой :). |
|
А кто помнит: что решили-то? 2 отдельные функции или дополнительный параметр? |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-01-19 19:54 | Raistlin | New Issue | |
2011-03-28 10:26 | vskirdin | Note Added: 0006592 | |
2011-03-31 13:35 | vskirdin | Note Added: 0006649 | |
2011-03-31 13:35 | vskirdin | Assigned To | => vskirdin |
2011-03-31 13:35 | vskirdin | Status | new => feedback |
2011-03-31 15:21 | JohnDoe | File Added: Release.32.gcc.7z | |
2011-04-03 23:04 | Raistlin | Note Added: 0006660 | |
2011-04-03 23:04 | Raistlin | Status | feedback => assigned |
2011-04-05 05:55 | vskirdin | Note Added: 0006663 | |
2011-04-05 07:28 | Raistlin | Note Added: 0006665 | |
2011-04-05 07:41 | vskirdin | Note Added: 0006666 | |
2011-04-05 08:58 | JohnDoe | Note Added: 0006669 | |
2011-04-05 09:07 | Raistlin | Note Added: 0006670 | |
2011-04-05 11:08 | Raistlin | Note Added: 0006673 | |
2011-04-05 11:11 | vskirdin | Note Added: 0006674 | |
2011-04-05 11:15 | vskirdin | Note Added: 0006675 | |
2011-04-05 11:23 | JohnDoe | Note Added: 0006676 | |
2011-04-05 11:23 | JohnDoe | Note Edited: 0006676 | |
2011-04-05 11:33 | vskirdin | Note Added: 0006677 | |
2011-04-05 11:35 | Raistlin | Note Added: 0006679 | |
2011-04-05 11:41 | JohnDoe | Note Added: 0006680 | |
2011-04-05 11:45 | Raistlin | Note Added: 0006681 | |
2011-04-05 12:18 | JohnDoe | Note Added: 0006684 | |
2011-04-05 12:21 | Raistlin | Note Added: 0006685 | |
2011-04-05 12:44 | JohnDoe | Note Added: 0006688 | |
2011-04-05 12:53 | Raistlin | Note Added: 0006689 | |
2011-04-06 10:01 | vskirdin | Note Added: 0006718 | |
2011-04-06 10:01 | vskirdin | Status | assigned => feedback |
2011-04-06 10:15 | JohnDoe | Note Added: 0006719 | |
2011-04-06 10:36 | vskirdin | Note Added: 0006720 | |
2011-04-06 14:52 | JohnDoe | Note Added: 0006721 | |
2011-04-11 08:42 | vskirdin | Note Added: 0006734 | |
2011-04-11 10:01 | JohnDoe | Note Added: 0006735 | |
2011-04-11 10:18 | vskirdin | Note Added: 0006737 | |
2011-04-11 11:14 | Raistlin | Note Added: 0006742 | |
2011-04-11 11:14 | Raistlin | Status | feedback => assigned |
2011-04-11 11:18 | Raistlin | Note Added: 0006743 | |
2011-04-11 11:38 | JohnDoe | Note Added: 0006744 | |
2011-04-11 13:15 | JohnDoe | Note Added: 0006745 | |
2011-04-11 13:50 | vskirdin | Note Added: 0006746 | |
2011-04-11 14:00 | DrKnS | Note Added: 0006747 | |
2011-04-11 17:51 | Raistlin | Note Added: 0006748 | |
2011-04-11 17:59 | JohnDoe | Note Added: 0006749 | |
2011-04-11 19:55 | Raistlin | Note Added: 0006750 | |
2011-04-12 05:50 | vskirdin | Note Added: 0006751 | |
2011-04-12 06:45 | Raistlin | Note Added: 0006754 | |
2011-04-12 11:56 | JohnDoe | Note Added: 0006756 | |
2011-04-12 16:15 | vskirdin | Note Added: 0006757 | |
2011-04-13 09:35 | JohnDoe | Note Added: 0006776 | |
2011-04-13 10:06 | Raistlin | Note Added: 0006777 | |
2012-02-20 14:41 | JohnDoe | Note Added: 0008620 | |
2017-12-01 16:36 | JohnDoe | Relationship added | related to 0002406 |