CurrentDirectory и плагины

Место, где разработчики плагинов могут поделиться своим опытом.
Shmuel
Posts: 5574
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 186 times

Текущая директория Фара

Post by Shmuel » Thu 02 Apr, 2015 23:06

Latest post of the previous page:

И ещё вопрос: при наличии ANSI-плагинов поддержка длинных путей не производится или становится менее полноценной?

User avatar
DrKnS
Posts: 5004
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

Текущая директория Фара

Post by DrKnS » Thu 02 Apr, 2015 23:18

При наличии ansi-плагинов фар обновляет текущий каталог процесса. При отсутствии - не обновляет.
Самому фару текущий каталог процесса безразличен.

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

Текущая директория Фара

Post by Shmuel » Thu 02 Apr, 2015 23:22

Так может будем его обновлять и при отсутствии ANSI-плагинов? Что мы теряем при этом?

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

Текущая директория Фара

Post by HaRT » Thu 02 Apr, 2015 23:34

Shmuel wrote:Что мы теряем при этом?
Винда блокирует текущую директорию процесса и никому не даёт её удалить.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

Текущая директория Фара

Post by Shmuel » Thu 02 Apr, 2015 23:41

HaRT wrote: Винда блокирует текущую директорию процесса и никому не даёт её удалить.
Ну мы в Фаре тоже не можем из активной панели удалить её папку традиционными фаровскими средствами.

По-видимому, установка Фаром текущей директории процесса не решает задачу на 100%, так как плагины могут её изменить. Так что мне придётся успокоиться. Спасибо за ответы!

User avatar
DrKnS
Posts: 5004
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

Текущая директория Фара

Post by DrKnS » Thu 02 Apr, 2015 23:45

Я ссылки не зря привёл, там всё это есть.

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

CurrentDirectory и плагины

Post by John Doe » Sat 23 Sep, 2017 10:27

Shmuel wrote:
Thu 02 Apr, 2015 20:57
1. panel.GetPanelDirectory(nil,1).Name (FCTL_GETPANELDIRECTORY) и far.GetCurrentDirectory() (FSF.GetCurrentDirectory) у меня при гулянии по разным папкам возвращают одно и то же (папку активной панели). Так должно быть?
Обнаружил, что в некоторых случаях FCTL_GETPANELDIRECTORY GetCurrentDirectory возвращает папку пассивной панели.
Баг?

P.S.
c:\Apps\Far3\Far.exe -ro -s empty /pC:\Apps\Far3\Plugins\LuaMacro
Макрос единственный

Code: Select all

Macro {
  area="Shell"; key="F2";
  condition=function()
    assert(far.GetCurrentDirectory()==panel.GetPanelDirectory(nil,1).Name,far.GetCurrentDirectory())
  end;
  action=function() end;
}
Точную последовательность для воспроизведения пока не скажу.
Надо открыть в редакторе файл, переключаться между редактором/панелями, и гулять по папкам.
Last edited by John Doe on Sat 23 Sep, 2017 12:37, edited 2 times in total.

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

CurrentDirectory и плагины

Post by John Doe » Sat 23 Sep, 2017 11:13

Уточнение: проявляется после сохранения файла (F2)
Вероятно, такой макрос будет удобнее:

Code: Select all

Macro {
  area="Editor"; key="CtrlTab";
  action=function()
    Keys"AKey"
    if Area.Shell then
      if far.GetCurrentDirectory()~=panel.GetPanelDirectory(nil,1).Name then
        far.Show(far.GetCurrentDirectory())
      end
    end
  end;
}

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

CurrentDirectory и плагины

Post by zg » Sat 23 Sep, 2017 12:00

John Doe wrote:
Sat 23 Sep, 2017 10:27
Обнаружил, что в некоторых случаях FCTL_GETPANELDIRECTORY возвращает папку пассивной панели.
в вашем случае он возвращает папку, куда был записан файл. почему вы решили, что это баг?

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

CurrentDirectory и плагины

Post by John Doe » Sat 23 Sep, 2017 12:36

Опечатка, речь о GetCurrentDirectory.
Я не знаю баг ли это, но если нет, то хотелось бы разобраться, как тогда правильно понимать и для чего на практике использовать это значение.

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

CurrentDirectory и плагины

Post by zg » Sat 23 Sep, 2017 13:00

я понял, что про GetCurrentDirectory, в общем баг есть, но он лишь косвенно связан GetCurrentDirectory. баг присутствует в самой первой ревизии открытых исходников. уже тогда там были вопросы.
пример. есть папки c:\1, c:\2, c:\3 и файл c:\2\test.txt
находясь в c:\1 запускаем команду edit:c:\2\test.txt
переходим в папку c:\3
переключаемся в открытый файл.
важно:жмём f2, т.е. сохраняем файл под исходным именем.
жмём shift-f2, вводим test2.txt.
где сохранился файл? правильно — в c:\1\test2.txt

на первый взгляд, все вызовы FarChDir в fileedit.cpp — лишние. единственное, что приходит в голову — какие-то доисторические плагины, которые при сохранении закладывались на текущую папку, а farcmd тогда не было. с другой стороны — история ж вроде была.

Post Reply

Return to “Разработка плагинов”