Page 1 of 1

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Tue 13 Dec, 2016 14:49
by Zmey78
Пишу макрос под эту задачу: http://forum.farmanager.com/viewtopic.php?t=10570

Работает очень нестабильно, раза 2 срабатывает, а затем уже почему-то реагирует на Enter только стандартным образом. Иногда перезапуск FAR ненадолго помогает, иногда нет. Far 3.0 build 4747 (x64).
  1. local F = far.Flags
  2.  
  3.  
  4.  
  5. Macro {
  6.  
  7.   description="Open from the temporary directory";
  8.  
  9.   area="Shell"; key="Enter";
  10.  
  11.   condition=function()
  12.  
  13.     local info = panel.GetPanelInfo(nil,1)
  14.  
  15.     local item = panel.GetCurrentPanelItem(nil,1)
  16.  
  17.     if info.PanelType==F.PTYPE_FILEPANEL and bit64.band(info.Flags,F.PFLAGS_PLUGIN)~=0 and not item.FileAttributes:find("d") then
  18.  
  19.       return true
  20.  
  21.     end
  22.  
  23.   end;
  24.  
  25.   action=function()
  26.  
  27.     Keys('F5 Del % T E M P % AltT Enter')
  28.  
  29.     win.ShellExecute(nil,nil,win.GetEnv("TEMP").."\\"..panel.GetCurrentPanelItem(nil,1).FileName)
  30.  
  31.   end;
  32.  
  33. }
Кладу сюда: "C:\Users\Alexey\AppData\Roaming\Far Manager\Profile\Macros\scripts\Panel.Open.lua"

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 14:02
by Zmey78
Zmey78 wrote: if info.PanelType==F.PTYPE_FILEPANEL and bit64.band(info.Flags,F.PFLAGS_PLUGIN)~=0 and not item.FileAttributes:find("d") then
Я подозреваю вот эту часть:
1) надо ли заключать условия в () между and?
2) правильно ли использую функцию find?
3) надо ли сравнивать с nil то, что возвращает эта функция?

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 14:09
by Shmuel
1. В данном случае это не обязательно, т.е. и так правильно.
2. Да.
3. Нет, функция ShellExecute всегда возвращает целое число.
Меня несколько смущает AltT в вашем макросе.

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 15:54
by Zmey78
3. Я про not item.FileAttributes:find("d") и нужно ли мне сравнивать с nil?
AltT работает, это для отметки пункта "перезаписывать существующие".

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 16:29
by Shmuel
Zmey78 wrote: 3. Я про not item.FileAttributes:find("d") и нужно ли мне сравнивать с nil?
Не нужно. Так, как у вас сделано - это эквивалентно сравнению с nil.
Zmey78 wrote: AltT работает, это для отметки пункта "перезаписывать существующие".
У меня английский интерфейс, там AltT исполняет другую функцию.

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 17:11
by Zmey78
Написал, теперь все нормально:
http://forum.farmanager.com/viewtopic.php?f=60&t=10579

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 17:36
by Shmuel
Zmey78 wrote: Написал, теперь все нормально:
И в чём же была проблема? Сравнение старой версии (которая у вас глючила) и новой показывает только косметические различия.

Макрос (работа с панелями) глючит, подскажите как лечить!

Posted: Wed 14 Dec, 2016 18:07
by Zmey78
Shmuel wrote: в чём же была проблема
Так и не понял, но теперь не глючит. Версия Far та же.