View Issue Details

IDProjectCategoryView StatusLast Update
0001681Far ManagerMacropublic2017-12-01 16:36
ReporterRaistlin Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status assignedResolutionopen 
Platformx86OSWindowsOS VersionXP SP3
Summary0001681: panel.setpath() не работает с плагинами
DescriptionНапример, если запустили RegistryBrowser:
macro:post panel.setpath(0,"HKEY_CURRENT_USER\\Console")
возвращает ошибку, хотя
cd HKEY_CURRENT_USER\Console
работает.
TagsNo tags attached.
Build

Relationships

related to 0002406 closedzg Panel.SetPath не работает 

Activities

vskirdin

2011-03-28 10:26

administrator   bugnote:0006592

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

vskirdin

2011-03-31 13:35

administrator   bugnote:0006649

так, попробуем :-)
(все так же на основе 1807)
идем в macro.cpp, функция panelsetpathFunc() и меняем

if (SelPanel->SetCurDir(pathName,TRUE))

на

if (SelPanel->SetCurDir(pathName,FALSE))

И вот тут как раз нужно протестить на предмет "а что отвалилось в "panel.setpath()" ;-))

JohnDoe

2011-03-31 15:21

updater  

Release.32.gcc.7z (733,767 bytes)

Raistlin

2011-04-03 23:04

reporter   bugnote:0006660

Отвалилось. Переход в обычные папки по panel.setpath() работает, пока не попробовали перейти по нему в ключ реестра, - после этого получаем ошибки "The system cannot find the file specified."

vskirdin

2011-04-05 05:55

administrator   bugnote:0006663

давай пример последовательности для воспроизведения.

Raistlin

2011-04-05 07:28

reporter   bugnote:0006665

Пардон. Не отвалилось. Забыл обратно панель на файловую поменять.

vskirdin

2011-04-05 07:41

administrator   bugnote:0006666

Есть вот такое предложение:
Если второй аргумент pathName относительный путь, то пытаемся выставить этот путь на указанной панели.
Если путь абсолютный (C:\... или \\server\share...), то выставляем этот путь, закрывая плагиновую панель (если она была).

Хотя, я бы оставил как есть и вот почему: дабы не усложнять жисть.
Т.е. функция должна только меняет путь на панели, не вызывая никаких плагинов. Если такого пути не находится, то отлуп. Если нужно перейти по пути на панели какого-нить плагина - вызови сначала плагин, а потом меняй путь.
Так будет подконтрольней...

ы?

JohnDoe

2011-04-05 08:58

updater   bugnote:0006669

А вот расскажите как же нам теперь при открытой плагиновой панели перейти на файловую?

Как вариант: отдельный флаг включающий обработку плагиновых панелей.

Raistlin

2011-04-05 09:07

reporter   bugnote:0006670

> Если путь абсолютный (C:\... или \\server\share...), то выставляем этот путь, закрывая плагиновую панель (если она была).
> Если нужно перейти по пути на панели какого-нить плагина - вызови сначала плагин, а потом меняй путь.
Взаимоисключающие параграфы? Чтобы перейти куда-то внутри плагина, надо будет в него по-любому перейти. А вот уходить из плагина по абсолютному пути - это было бы удобно, потому что иначе замусоривается история.
Вот если бы был механизм временной блокировки истории, тогда такое усложнение было бы точно ни к чему. Поиском вроде не нашел, добавить виш?

Raistlin

2011-04-05 11:08

reporter   bugnote:0006673

> как же нам теперь при открытой плагиновой панели перейти на файловую
Да, действительно. Причем таким вот способом:
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.

vskirdin

2011-04-05 11:11

administrator   bugnote:0006674

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

vskirdin

2011-04-05 11:15

administrator   bugnote:0006675

не нравится мне "и еще один параметр".
лучше добавить panel.setvpath(), по аналогии с CD и CHDIR - т.е. panel.setvpath() - это CD (в пределах "этой FS"), а panel.setpath - это CHDIR

JohnDoe

2011-04-05 11:23

updater   bugnote:0006676

Last edited: 2011-04-05 11:23

>т.е. panel.setvpath() - это CD (в пределах "этой FS")
Если проводить полную аналогию, то в случае когда путь на текущей панели не найден, то он должен искаться в реальной ФС.
Не уверен что это хорошо.

vskirdin

2011-04-05 11:33

administrator   bugnote:0006677

это аналогия была

Raistlin

2011-04-05 11:35

reporter   bugnote:0006679

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

JohnDoe

2011-04-05 11:41

updater   bugnote:0006680

>при лишнем параметре мы меняем только его значение, а при лишней функции - пишем кусок макроса заново.
Добавить в имя 1 букву ещё легче чем параметр.
Я за отдельную функцию.

>это аналогия была
Аналогия предполагает именно аналогию. Если что-то "не аналогично", то надо это оговорить явно.
Я лично пока не знаю как лучше.

Raistlin

2011-04-05 11:45

reporter   bugnote:0006681

> Добавить в имя 1 букву ещё легче чем параметр.
А можно пример? Как, скажем, превратить panel.setpos в panel.setposidx?

JohnDoe

2011-04-05 12:18

updater   bugnote:0006684

Тут 3 буквы, что дела не меняет.
И мне почему-то казалось что мы рассматриваем совсем другую пару: panel.setpath()/panel.setVpath()

Raistlin

2011-04-05 12:21

reporter   bugnote:0006685

Я про то, что имя функции нельзя брать из переменной, а значит, кусок кода надо будет писать дважды.

JohnDoe

2011-04-05 12:44

updater   bugnote:0006688

Теперь идея понятна.
Но всё равно с трудом представляю как вы практически собираетесь это использовать. В цикле?

P.S.
Отдельная функция лучше в плане простоты: документация проще, а значит проще применять, и потом легче читать код.

Raistlin

2011-04-05 12:53

reporter   bugnote:0006689

Мне не нравится не столько отдельная функция, сколько то, что более востребованный вариант (а им, очевидно, будет именно panel.setvpath() - как более универсальный) имеет более длинное и неочевидное в написании имя, чем менее востребованный. Сравните CD и CHDIR.
Мне кажется, panel.setpath() и panel.setfspath() смотрелись бы лучше.

vskirdin

2011-04-06 10:01

administrator   bugnote:0006718

build 1946
   Относительные пути - в рамках текущей FS
   Абс.пути (C:\ \\Server\share) закрывают плагиновую панель (если это была она)

JohnDoe

2011-04-06 10:15

updater   bugnote:0006719

>Абс.пути (C:\ \\Server\share) закрывают плагиновую панель (если это была она)
Ну а как же с панелями типа NTFS File Information?
Закрывать её как-то совсем не в тему.

vskirdin

2011-04-06 10:36

administrator   bugnote:0006720

а это тема совершенно друго тикета...

JohnDoe, заведи один большой тикет с сабжем "все пропало, все плохо" - и там давай _ВСЕ_ проблемы современности решать :-(

JohnDoe

2011-04-06 14:52

updater   bugnote:0006721

>а это тема совершенно друго тикета...
Это с какого момента вдруг?
Не я создал тикет, но смотрим: "0001681: panel.setpath() не работает с плагинами"
Предлагаемое в 1946 решает эту проблему только частично, о чём я и сообщил.

vskirdin

2011-04-11 08:42

administrator   bugnote:0006734

так на чем останавливаемся?
добавляем необязательный четвертый параметр?
E=panel.setpath(panelType,path[,filename[,realpath]])

JohnDoe

2011-04-11 10:01

updater   bugnote:0006735

Если так, то пусть будет три возможных значения realpath:
1 - реальный путь
0 - плагиновый путь
-1 (или не указан) - авто, т.е. то что предлагается в build 1946

vskirdin

2011-04-11 10:18

administrator   bugnote:0006737

про "-1" спрошу твоим же вопросом:
"Ну а как же с панелями типа NTFS File Information?"
(и в догонку ту даже плагин ls-lr)

Raistlin

2011-04-11 11:14

reporter   bugnote:0006742

Не понимаю, зачем три значения-то? По умолчанию (0) - текущая FS, 1 - реальная FS.

Raistlin

2011-04-11 11:18

reporter   bugnote:0006743

> 1 - реальный путь
> 0 - плагиновый путь
> -1 (или не указан) - авто, т.е. то что предлагается в build 1946
Непонятно, что должно происходить при 0, если на панели сейчас реальная FS.

JohnDoe

2011-04-11 11:38

updater   bugnote:0006744

>про "-1" спрошу твоим же вопросом:
Ну так для этих панелей надо явно указать 0.
Для большинства же можно будет ничего не указывать.

Для меня это пока всё чисто умозрительно. Возможно лучше сделать отдельную функцию...

JohnDoe

2011-04-11 13:15

updater   bugnote:0006745

>Непонятно, что должно происходить при 0, если на панели сейчас реальная FS.
Ошибку должно выдавать.

vskirdin

2011-04-11 13:50

administrator   bugnote:0006746

setpath при встрече абс пути отработает с физикой, а setVpath - в пределах текущей FS.
так?

DrKnS

2011-04-11 14:00

administrator   bugnote:0006747

> setpath при встрече абс пути отработает с физикой, а setVpath - в пределах текущей FS.

лучше по аналогии с [panel].<fattr|fexist>

fattr - работает всегда с реальной фс.
panel.fattr - работает всегда с панелью.

если на панели реальная фс - функции равнозначны.

Raistlin

2011-04-11 17:51

reporter   bugnote:0006748

>> Непонятно, что должно происходить при 0, если на панели сейчас реальная FS.
> Ошибку должно выдавать.
Что явно говорит о том, что это значение лишнее.

> setpath при встрече абс пути отработает с физикой, а setVpath - в пределах текущей FS.
Я позволю себе повторить свое соображение по этому поводу: http://bugs.farmanager.com/view.php?id=1681#c6689

JohnDoe

2011-04-11 17:59

updater   bugnote:0006749

>Что явно говорит о том, что это значение лишнее.
Это не так, поскольку есть большая разница между 0 и -1

Raistlin

2011-04-11 19:55

reporter   bugnote:0006750

Если вместо "плагинового пути" использовать "путь в текущей файловой системе", то разница исчезает. А не использовать смысла нет, коль на реальной FS "плагиновый путь" возвращает ошибку. Это, по-моему, вполне очевидно.
Я все-таки за параметр, а не за доп. функцию: он не ломает текущее поведение и не загромождает язык.

vskirdin

2011-04-12 05:50

administrator   bugnote:0006751

А мне нравится вариант DrKnS.

Raistlin

2011-04-12 06:45

reporter   bugnote:0006754

Можно и так.

JohnDoe

2011-04-12 11:56

updater   bugnote:0006756

>А не использовать смысла нет, коль на реальной FS "плагиновый путь" возвращает ошибку.
Смысл в 0 очень даже есть, т.к. на плагиновой панели могут быть пути похожие на реальные, и в случае ошибки хотелось бы её обработать, а не закрывать панель.

>А мне нравится вариант DrKnS.
>>Можно и так.
А разве Skirda не то же самое предлагал выше (http://bugs.farmanager.com/view.php?id=1681#c6675)?

vskirdin

2011-04-12 16:15

administrator   bugnote:0006757

тоже самое, только DrKnS правильнее выразился :-)

JohnDoe

2011-04-13 09:35

updater   bugnote:0006776

Что если при попытке Panel.Setpath на панели такого пути не найдено?
Ошибка, или пытаемся искать в реальной FS?
(Предлагаю не искать)

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

Raistlin

2011-04-13 10:06

reporter   bugnote:0006777

Однозначно - не искать.

> очень хотелось бы иметь возможность закрыть активную плагиновую панель и вывалиться в предыдущую
Виш за тобой :).

JohnDoe

2012-02-20 14:41

updater   bugnote:0008620

А кто помнит: что решили-то?
2 отдельные функции или дополнительный параметр?

Issue History

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