CurrentDirectory и плагины

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

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

Post by Shmuel »

Latest post of the previous page:

DrKnS wrote: По второй ссылке написано же:
ОК, спасибо.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

И ещё вопрос: при наличии ANSI-плагинов поддержка длинных путей не производится или становится менее полноценной?
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

При наличии ansi-плагинов фар обновляет текущий каталог процесса. При отсутствии - не обновляет.
Самому фару текущий каталог процесса безразличен.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Так может будем его обновлять и при отсутствии ANSI-плагинов? Что мы теряем при этом?
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Shmuel wrote:Что мы теряем при этом?
Винда блокирует текущую директорию процесса и никому не даёт её удалить.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

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

По-видимому, установка Фаром текущей директории процесса не решает задачу на 100%, так как плагины могут её изменить. Так что мне придётся успокоиться. Спасибо за ответы!
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Я ссылки не зря привёл, там всё это есть.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CurrentDirectory и плагины

Post by John Doe »

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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CurrentDirectory и плагины

Post by John Doe »

Уточнение: проявляется после сохранения файла (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: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

CurrentDirectory и плагины

Post by zg »

John Doe wrote: Sat 23 Sep, 2017 10:27Обнаружил, что в некоторых случаях FCTL_GETPANELDIRECTORY возвращает папку пассивной панели.
в вашем случае он возвращает папку, куда был записан файл. почему вы решили, что это баг?
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

CurrentDirectory и плагины

Post by John Doe »

Опечатка, речь о GetCurrentDirectory.
Я не знаю баг ли это, но если нет, то хотелось бы разобраться, как тогда правильно понимать и для чего на практике использовать это значение.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

CurrentDirectory и плагины

Post by zg »

я понял, что про 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 “Разработка плагинов”