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

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

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

Post by Smitis »

Продублирую отсюда, что бы не потерялся.
Макрос, переключающийся между 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 55 times
Last edited by Smitis on Fri 21 Jul, 2017 13:53, edited 1 time in total.
User avatar
Smitis
Posts: 1640
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 20 times
Been thanked: 41 times

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

Post by Smitis »

Версия 1.01
- Добавлено сохранение режима панелей, сортировки, показ скрытых файлов. Походу выяснилось, что не все режимы можно задать напрямую из lua :(
- Позиционирование курсора сделано по именам, а не по индексу, так как выяснилось, что MultiArc не всегда правильно читает время создания файлов и сортировка получается разной. При таком способе положение текущего файла на панели может измениться, но хотя-бы сам текущий файл останется прежним. :o
Last edited by Smitis on Fri 21 Jul, 2017 14:02, edited 1 time in total.
Разум когда-нибудь победит.
User avatar
Wave
Posts: 1792
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 5 times
Been thanked: 17 times

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

Post by Wave »

В принципе, я этим макросом не пользуюсь, потому что не пользуюсь мультиарком, арклайта хватает. Но вот сейчас перебираю завалы макросов, и вот что получается.
При переключении арклайт на мультиарк без вопросов переключает.
При переключении мультиарк на арклайт переключает с таким вот сообщением:

Кроме того, в обоих случаях курсор оказывается в корне текущей папки архива.

FAR 5710. Не исключаю вину своей кучи залежей макросов, считая такие вещи как LuaManager и многократные за эти годы обновления ФАРа поверх без создания нового профиля.

Да, и чуть не забыл. Проверку на архив я переделал вот так:

Code: Select all

if Object.Title:sub(1,12):lower()=="arclite:rar:" or Object.Title:sub(1,13):lower()=="arclite:rar5:" or Object.Title:sub(1,4)=="RAR:" then
а то у вас проверяется Object.Title:sub(1,12)=="arclite:Rar:" а в заголовке светится ArcLite:Rar и переключения не происходит.
Пользуюсь ФАРом больше 20 лет © собирательный.
Post Reply

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