Переключение arclite <-> multiarc из архива

Здесь обсуждается всё, что касается макросов.
Post Reply
Smitis
Posts: 1493
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

Переключение arclite <-> multiarc из архива

Post by Smitis » Thu 20 Jul, 2017 11:07

Продублирую отсюда, что бы не потерялся.
Макрос, переключающийся между ArcLite и MultiArc при нахождении в архиве RAR.
При переключении сохраняется выделение файлов, положение курсора и вид панелей (сортировка, режим и пр.).
Клавиши по умолчанию AltShiftA или ShiftF1.
  1. -- Переключение между архиваторами ArcLite <-> MultiArc из архивов RAR.
  2. -- v.1.01 (C) Smitis, 2016-2017
  3. -- Обсуждение: http://forum.farmanager.com/viewtopic.php?t=10834
  4.  
  5. local ARCLITE_ID = win.Uuid("65642111-AA69-4B84-B4B8-9249579EC4FA")
  6. local MULTIARC_ID = win.Uuid("C5508DDB-5175-4736-9A10-C8F6EED7B32F")
  7.  
  8. local F = far.Flags
  9.  
  10. Macro {
  11.     description="Arcs: Switch between ArcLite and MultiArc";
  12.     area="Shell Search";
  13.     key="AltShiftA ShiftF1";
  14.     condition=function()
  15.         local pluginid = panel.GetPanelDirectory(nil,1).PluginId
  16.         return pluginid == ARCLITE_ID or pluginid == MULTIARC_ID
  17.     end;
  18.     action=function()
  19.         if Area.Search then Keys "Esc" end
  20.         if Object.Title:sub(1,12)=="arclite:Rar:" or Object.Title:sub(1,13)=="arclite:Rar5:" or Object.Title:sub(1,4)=="RAR:" then
  21.             local dir = panel.GetPanelDirectory(nil,1)
  22.             local inf = panel.GetPanelInfo(nil,1)
  23.             local topfile = Panel.Item(0,inf.TopPanelItem,0)
  24.             local currentfile = Panel.Item(0,inf.CurrentItem,0)
  25.             local selected = APanel.Selected
  26.             mf.clip(5,2) -- для сохранения выделения через буфер
  27.             if selected then Keys "CtrlShiftIns" end
  28.             dir.PluginId = dir.PluginId==ARCLITE_ID and MULTIARC_ID or ARCLITE_ID
  29.             if panel.SetPanelDirectory(nil,1,dir) then
  30.                 local inf2 = panel.GetPanelInfo(nil,1)
  31.                 -- Восстанавливаем вид панели
  32.                 panel.SetViewMode(nil,1,inf.ViewMode)
  33.                 panel.SetSortMode(nil,1,inf.SortMode)
  34.                 panel.SetSortOrder(nil,1,band(inf.Flags,F.PFLAGS_REVERSESORTORDER)~=0)
  35.                 panel.SetNumericSort(nil,1,band(inf.Flags,F.PFLAGS_NUMERICSORT)~=0)
  36.                 panel.SetCaseSensitiveSort(nil,1,band(inf.Flags,F.PFLAGS_CASESENSITIVESORT)~=0)
  37.                 panel.SetDirectoriesFirst(nil,1,band(inf.Flags,F.PFLAGS_DIRECTORIESFIRST)~=0)
  38.                 if band(inf.Flags,F.PFLAGS_SHOWHIDDEN) ~= band(inf2.Flags,F.PFLAGS_SHOWHIDDEN) then Keys "CtrlH" end
  39.                 if band(inf.Flags,F.PFLAGS_USESORTGROUPS) ~= band(inf2.Flags,F.PFLAGS_USESORTGROUPS) then Keys "ShiftF11" end
  40.                 if band(inf.Flags,F.PFLAGS_SELECTEDFIRST) ~= band(inf2.Flags,F.PFLAGS_SELECTEDFIRST) then Keys "ShiftF12" end
  41.                 -- Позиционируем курсор так, чтобы не только текущий файл был тот же, но и его положение было то же самое
  42.                 Panel.SetPosIdx(0,-1)
  43.                 Panel.SetPos(0,topfile)
  44.                 Panel.SetPos(0,currentfile)
  45.                 -- Восстанавливаем выделение
  46.                 if selected then Panel.Select(0,1,2,mf.clip(0)) end
  47.             end
  48.         end
  49.     end;
  50. }
ArcSwitch.1.01.7z
ArcSwitch 1.01
(1.22 KiB) Downloaded 19 times
Last edited by Smitis on Fri 21 Jul, 2017 13:53, edited 1 time in total.

Smitis
Posts: 1493
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

Переключение arclite <-> multiarc из архива

Post by Smitis » Fri 21 Jul, 2017 13:58

Версия 1.01
- Добавлено сохранение режима панелей, сортировки, показ скрытых файлов. Походу выяснилось, что не все режимы можно задать напрямую из lua :(
- Позиционирование курсора сделано по именам, а не по индексу, так как выяснилось, что MultiArc не всегда правильно читает время создания файлов и сортировка получается разной. При таком способе положение текущего файла на панели может измениться, но хотя-бы сам текущий файл останется прежним. :o
Last edited by Smitis on Fri 21 Jul, 2017 14:02, edited 1 time in total.
Разум когда-нибудь победит.

Post Reply

Return to “Обсуждение макросов”