Panel.SetPath внутри архива

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
DV
Posts: 350
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 8 times
Been thanked: 2 times

Panel.SetPath внутри архива

Post by DV » Thu 02 Aug, 2018 15:10

Проверял с FAR 3.0 build 5234 x86 и FAR 3.0 build 5248 x86.
1. Качаем архив Far30b5248.x86.20180802.7z, распаковываем в новую пустую папку.
2. Рядом с этой новой пустой папкой (на том же уровне, что и она) создаем папку Progs.
3. Запускаем FAR из новой папки с Far30b5248, из этого запущенного FAR заходим внутрь архива Far30b5248.x86.20180802.7z
4. Находясь внутри архива, выполняем команду:

Code: Select all

lua:local p = win.GetEnv("FARHOME") .. "\\..\\Progs"; Panel.SetPath(0, p) 
Результат: ничего не происходит.
Ожидается: переход в папку Progs.
5. Все еще находясь внутри архива, выполняем команду:

Code: Select all

lua:local p = win.GetEnv("FARHOME") .. "\\..\\Progs"; print("cd " .. p) 
Результат: по нажатию Enter мы переходим в папку Progs.
Вопрос: почему не сработала команда в пункте 4 ?

Shmuel
Posts: 5598
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

Panel.SetPath внутри архива

Post by Shmuel » Thu 02 Aug, 2018 15:37

DV wrote:
Thu 02 Aug, 2018 15:10
Вопрос: почему не сработала команда в пункте 4 ?
Потому что когда активная панель является панелью плагина, SetPath() передаёт имя папки плагину, то есть просит его установить у себя требуемый путь. Поскольку такого пути в архиве нет, то ничего не происходит, и функция возвращает false.

Кстати, для вспомогательных переменных в комстроке нет надобности писать "local" (если они только не совпадают с существующими глобальными переменными).

User avatar
zg
zero-gravity
Posts: 5517
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 80 times
Contact:

Panel.SetPath внутри архива

Post by zg » Thu 02 Aug, 2018 15:56

Shmuel wrote:
Thu 02 Aug, 2018 15:37
Потому что когда активная панель является панелью плагина, SetPath() передаёт имя папки плагину, то есть просит его установить у себя требуемый путь.
если только переданный путь не является абсолютным.

DV
Posts: 350
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 8 times
Been thanked: 2 times

Panel.SetPath внутри архива

Post by DV » Thu 02 Aug, 2018 16:09

Как же изменить скрипт, чтобы он срабатывал и из плагиновой панели тоже?

User avatar
John Doe
Бюрократ
Posts: 12069
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 151 times

Panel.SetPath внутри архива

Post by John Doe » Thu 02 Aug, 2018 16:58

На выбор:
1. far.ConvertPath
2. Самостоятельно закрывать панель плагина
3. Заменить Panel.SetPath на аналогичные команды плагинового апи

User avatar
HaRT
Moderator
Posts: 8525
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 75 times
Been thanked: 137 times

Panel.SetPath внутри архива

Post by HaRT » Thu 02 Aug, 2018 17:00

zg wrote:
Thu 02 Aug, 2018 15:56
если только переданный путь не является абсолютным
Так ведь в исходном примере путь предположительно абсолютный (поскольку %FARHOME%)…
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5517
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 80 times
Contact:

Panel.SetPath внутри архива

Post by zg » Thu 02 Aug, 2018 17:22

HaRT wrote:
Thu 02 Aug, 2018 17:00
Так ведь в исходном примере путь предположительно абсолютный (поскольку %FARHOME%)…
с каких пор пути, содержащие .. стали абсолютными?

Shmuel
Posts: 5598
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

Panel.SetPath внутри архива

Post by Shmuel » Thu 02 Aug, 2018 17:48

zg wrote:
Thu 02 Aug, 2018 17:22
с каких пор пути, содержащие .. стали абсолютными?
Данный путь состоит из абсолютного пути (%FARHOME%), к которому добавлен относительный (..\\Progs).
На мой взгляд, результат этого "сложения" = абсолютный путь.

User avatar
HaRT
Moderator
Posts: 8525
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 75 times
Been thanked: 137 times

Panel.SetPath внутри архива

Post by HaRT » Thu 02 Aug, 2018 18:18

zg wrote:
Thu 02 Aug, 2018 17:22
с каких пор пути, содержащие .. стали абсолютными?
Абсолютный путь или относительный определяется не тем, содержит ли он компоненты . или .., а тем, начинается ли он с / под никсами или с \\/БУКВА_ДИСКА:\ под Виндой. Наличие компоненты . или .. в середине влияет на то, является ли путь нормализованным/каноническим, но не на то, абсолютный ли он.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
zg
zero-gravity
Posts: 5517
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 80 times
Contact:

Panel.SetPath внутри архива

Post by zg » Thu 02 Aug, 2018 19:57

ну значит нужен абсолютный нормализованный.

DV
Posts: 350
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 8 times
Been thanked: 2 times

Panel.SetPath внутри архива

Post by DV » Fri 03 Aug, 2018 07:14

Для протокола, рабочий вариант, на котором я остановился:

Code: Select all

lua:local p = win.GetEnv("FARHOME") .. "\\..\\Progs"; p = far.ConvertPath(p, "CPM_FULL"); Panel.SetPath(0, p)

Post Reply

Return to “Нужна помощь”