WFX Вызов функций TC изнутри
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Написание плагинов для Total Commander

#1: WFX Вызов функций TC изнутри Author: KorneySanLocation: Беларусь, Гомель PostPosted: Wed May 25, 2011 13:58
    —
Пишу FS-плагин.
Есть ли возможность:
1. обрабатывать в плагине нажатие F3, F4, F9 ?
2. использовать для внутреннего копирования функции самого TC ? (пример: файл плагина - это реальный файл на винте, и при желании его можно куда-нибудь скопировать или перенести).

P.S. Поиск тут ничего не нашёл, FsLinksToLocalFiles/FsGetLocalName попробовал - не работает.

#2:  Author: MVVLocation: Ростов-Дон PostPosted: Wed May 25, 2011 15:16
    —
Обрабатывать нажатия клавиш в плагине нельзя (разве что хуками и прочей низкоуровневой ерундой).

По нажатию F3/F4 тотал обычно извлекает файл во временную папку и открывает в листере/редакторе. По F8 (думаю, это подразумевалось, а не F9) тотал вызывает функцию плагина по удалению файла/папки. Если плагин скажет тоталу, что он - плагин временной панели, тотал будет спрашивать у плагина путь к физическому файлу вместо извлечения файла во временную папку.

Использовать функции тотала нельзя, никакой интерфейс для этого тотал не предоставляет (единственное, что предоставляет - это показ окон с полем ввода).

#3:  Author: KorneySanLocation: Беларусь, Гомель PostPosted: Wed May 25, 2011 15:25
    —
MVV wrote:
По F8 (думаю, это подразумевалось, а не F9) тотал вызывает функцию плагина по удалению файла/папки.

Я имел в виду именно F9, поскольку F8 у меня отлично заработала - после вопроса об удалении срабатывают все "вложенные" действия.
MVV wrote:
Если плагин скажет тоталу, что он - плагин временной панели, тотал будет спрашивать у плагина путь к физическому файлу вместо извлечения файла во временную папку.

Пробовал. В списке есть файлы типа .txt, которые, разумеется, должны были открыться. Однако на выходе получился пшик. ЧЯДНТ?
MVV wrote:
Использовать функции тотала нельзя, никакой интерфейс для этого тотал не предоставляет

Т.е. чтобы скопировать файл "из плагина, придётся реализовывать FsGetFile и остальной геморрой самостоятельно?

И ещё вопрос. Нашёл тут на форуме способ обновить панель через cm_RereadSource, однако и он не работает. В тоже время при "открытии" файла текст подтверждения указывает на то, что информация о файлах успешно обновилась. Почему же не обновилась панель?

#4:  Author: MVVLocation: Ростов-Дон PostPosted: Wed May 25, 2011 15:53
    —
Quote:
Я имел в виду именно F9

А что есть F9?

Quote:
Пробовал. В списке есть файлы типа .txt, которые, разумеется, должны были открыться.

Плагин точно экспортирует функции FsLinksToLocalFiles и FsGetLocalName?

Quote:
Т.е. чтобы скопировать файл "из плагина, придётся реализовывать FsGetFile и остальной геморрой самостоятельно?

И ещё вопрос. Нашёл тут на форуме способ обновить панель через cm_RereadSource, однако и он не работает. В тоже время при "открытии" файла текст подтверждения указывает на то, что информация о файлах успешно обновилась. Почему же не обновилась панель?

Придется. Тотал ведь не знает, какая файловая система у плагина.

При вызове cm_RereadSource какая панель активна? Обновляется только активная панель. И вообще, вызов этой команды приводит к куче неприятных моментов типа выхода из архивов.

#5:  Author: KorneySanLocation: Беларусь, Гомель PostPosted: Wed May 25, 2011 16:16
    —
MVV wrote:
А что есть F9?

ХЕЗ. Я думал, что есть реакция на Fx, так что вопрос закрыт.
MVV wrote:
Плагин точно экспортирует функции FsLinksToLocalFiles и FsGetLocalName?

Code:

function FsLinksToLocalFiles:bool; stdcall;
begin
 Result:=True;
end;

function FsGetLocalName(RemoteName:pchar;maxlen:integer):bool; stdcall;
 var
   fn, rn: String;
   i: Integer;
begin
 CS_GLN.Enter;
 fn:=StrPas(RemoteName);
 Delete(fn, 1, 1);
 i:=DataIndex(fn);
 if i<0 then
   Result:=False
 else
  begin
   rn:=ExtractToken('saveto', DataGet(i));
   if FileExists(rn) then
    begin
     FillChar(RemoteName, maxlen, 0);
     if Length(rn)<maxlen then
      begin
       StrPCopy(RemoteName, rn);
       Result:=true;
      end
     else
       Result:=false;
    end
   else
     Result:=false;
  end;
 CS_GLN.Leave;
end;

exports
  FsInit,
  FsFindFirst,
  FsFindNext,
  FsFindClose,
  FsGetDefRootName,
  FsSetDefaultParams,
  FsExecuteFile,
  //FsGetFile,
  //FsStatusInfo,
  FsExtractCustomIcon,
  FsDeleteFile,
  FsLinksToLocalFiles,
  FsGetLocalName;

Как-то так.

MVV wrote:
Придется. Тотал ведь не знает, какая файловая система у плагина.

Ясно, спасибо.
MVV wrote:
При вызове cm_RereadSource какая панель активна? Обновляется только активная панель. И вообще, вызов этой команды приводит к куче неприятных моментов типа выхода из архивов.

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

#6:  Author: CaptainFlintLocation: Москва PostPosted: Thu May 26, 2011 01:25
    —
KorneySan wrote:
Просто задача стоит таким образом: происходят внешние изменения данных, которые должны отразиться в обновлении панели (меняются значки и размер файлов).

Поменяй для обновившегося файла дату модификации, чтобы при перечитывании каталога Тотал её получил. Тогда он обновит и остальное.

#7:  Author: KorneySanLocation: Беларусь, Гомель PostPosted: Thu May 26, 2011 09:13
    —
CaptainFlint wrote:
Поменяй для обновившегося файла дату модификации, чтобы при перечитывании каталога Тотал её получил. Тогда он обновит и остальное.

Спасибо, помогло.
До этого я устанавливал дату модификации, одинаковую с датой создания. Теперь я устанавливаю дату модификации в текущее время, обновление работает.



Total Commander -> Написание плагинов для Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group