Многовариантный макрос для Visual Compare

Здесь обсуждается всё, что касается макросов.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

Многовариантный макрос для Visual Compare

Post by LanKing »

Panel.VisualCompare, v1.3, (c) 2014, LanKing.

Мой вариант макроса для плагина Visual Compare с поддержкой branch панелей и прочими плюшками.

Варианты срабатывания:
  • На активной панели выделено 2 файла или 2 директории - сравнить их.
  • На обоих панелях выделено по 1 файлу - сравнить их
  • Иные случаи: Курсор на обеих панелях на файлах: если пути не одинаковые, сравнить их, иначе -- запустить меню плагина.
Также если попытаться сравнить файл и папку, что невозможно: будет выведено сообщение об ошибке с предложением стандартного диалога Visual Compare.

Плагин является продвинутой версией плагина от AleXH, переписанного LanKing
Пофикшены некоторые баги, добавлены дополнительные условия и дополнения по интерфейсу
В разработке также использовались наработки SimSU (локализация)
  1. -----------------------------------------------------------------------------------------
  2.  
  3. -- Panel.VisualCompare, v1.3, (c) 2014, LanKing.  
  4.  
  5. -- Сравнение файлов с помощью плагина Visual Compare с поддержкой Branch панелей
  6.  
  7.  
  8.  
  9. -- Плагин является продвинутой версией плагина от AleXH, переписанного LanKing
  10.  
  11. -- Пофикшены некоторые баги, добавлены дополнительные условия и дополнения по интерфейсу  
  12.  
  13. -- В разработке также использовались наработки SimSU (локализация)
  14.  
  15.  
  16.  
  17.  
  18.  
  19. -- Варианты работы:
  20.  
  21. -- 1. На активной панели выделено 2 файла или 2 директории - сравнить их
  22.  
  23. -- 2. На обоих панелях выделено по 1 файлу - сравнить их
  24.  
  25. -- 3. Иные случаи: Курсор на обеих панелях на файлах: Если пути не одинаковые, сравнить их;
  26.  
  27. -- 4. Если в предидущем пункте пути одинаковые -- запустить меню плагина;
  28.  
  29.  
  30.  
  31. -- Также если попытаться сравнить файл и папку, что невозможно: будет выведено сообщение
  32.  
  33. -- об ошибке с предложением стандартного диалога Visual Compare
  34.  
  35.  
  36.  
  37. -----------------------------------------------------------------------------------------
  38.  
  39.  
  40.  
  41.  
  42.  
  43. ---- Локализация
  44.  
  45. _G.far.lang=far.lang or win.GetEnv("farlang")
  46.  
  47.  
  48.  
  49. -- Встроенные языки / Buildin laguages
  50.  
  51. local function Messages()
  52.  
  53.  
  54.  
  55. if far.lang=="Russian" then return{
  56.  
  57.     Description="Visual Compare: Сравнение 2 выделенных файлов на активной панели; 1 на активной и 1 на пассивной; Файл под курсором на активной и на пассивной";
  58.  
  59.     MsgSameFiles="Visual Compare: Обнаружены одинаковые объекты.";
  60.  
  61.     MsgStandartDlg = 'Запустить стандартный диалог сравнения?';
  62.  
  63.     MsgDifferent="Visual Compare: Невозможно сравнить файл и папку";
  64.  
  65. }
  66.  
  67. else return{
  68.  
  69.     Description="Visual Compare: 2 selected files on active panel OR 1 selected file on active panel and 1 selected file on passive panel or current files on both panels";
  70.  
  71.     MsgSameFiles="Visual Compare: Objects are equal.";
  72.  
  73.     MsgStandartDlg = 'Start standart compare dialog?';
  74.  
  75.     MsgDifferent="Visual Compare: Can't compare file and folder";
  76.  
  77. }
  78.  
  79. end;
  80.  
  81. end;
  82.  
  83.  
  84.  
  85. local M=Messages();
  86.  
  87.  
  88.  
  89.  
  90.  
  91. local VisComp = "AF4DAB38-C00A-4653-900E-7A8230308010"
  92.  
  93.  
  94.  
  95. Macro {
  96.  
  97.  description=M.Description; area="Shell Tree"; key="Ctrl/";
  98.  
  99. action = function()
  100.  
  101.  
  102.  
  103.   -- Can't compare file and folder message
  104.  
  105.   local function badattr(f1, f2)
  106.  
  107.     if msgbox(M.MsgDifferent, "\n"..f1.."\n"..f2.."\n\n"..M.MsgStandartDlg.."\n\n", 0x00040000)==1 then Plugin.Menu(VisComp) end;
  108.  
  109.     return false;
  110.  
  111.   end;
  112.  
  113.  
  114.  
  115.   local AP,PP,AC,PC,fn,attrChecked = APanel.Path0,PPanel.Path0,APanel.Current,PPanel.Current,"",false
  116.  
  117.  
  118.  
  119.   -- 2 files on active panel
  120.  
  121.   if APanel.SelCount == 2 then
  122.  
  123.     PP,AC,PC = AP,panel.GetSelectedPanelItem(nil,1,1),panel.GetSelectedPanelItem(nil,1,2)
  124.  
  125.    
  126.  
  127. if mf.index(AC.FileAttributes, 'd')~=mf.index(PC.FileAttributes, 'd') then return badattr(AC.FileName,PC.FileName,true); end;
  128.  
  129. AC,PC,attrChecked = AC.FileName,PC.FileName,true
  130.  
  131.  
  132.  
  133.   -- selected one file on active and one on passive
  134.  
  135.   elseif APanel.SelCount == 1 and PPanel.SelCount == 1 then
  136.  
  137.     AC,PC = panel.GetSelectedPanelItem(nil,1,1),panel.GetSelectedPanelItem(nil,0,1)
  138.  
  139.  
  140.  
  141. if mf.index(AC.FileAttributes, 'd')~=mf.index(PC.FileAttributes, 'd') then return badattr(AC.FileName,PC.FileName,true); end;
  142.  
  143. AC,PC,attrChecked = AC.FileName,PC.FileName,true
  144.  
  145.  
  146.  
  147.   end
  148.  
  149.  
  150.  
  151.   if AC:match("^[A-Z]:") then AP=AC elseif AP == "" then AP="\\" elseif AC ~= ".." then AP=AP.."\\"..AC end
  152.  
  153.   if PC:match("^[A-Z]:") then PP=PC elseif PP == "" then PP="\\" elseif PC ~= ".." then PP=PP.."\\"..PC end -- тут может быть условие для ..
  154.  
  155.  
  156.  
  157.   if (not attrChecked and not APanel.Folder==PPanel.Folder) then return badattr(AP, PP); end;
  158.  
  159.  
  160.  
  161.   if AP == PP then
  162.  
  163.     if msgbox(M.MsgSameFiles, "\n"..AP.."\n\n"..M.MsgStandartDlg.."\n\n", 0x00040000)==1 then Plugin.Menu(VisComp) end;
  164.  
  165.   else
  166.  
  167.     if (APanel.SelCount ~= 2 and not APanel.Left) then fn=PP..'" "'..AP else fn=AP..'" "'..PP end
  168.  
  169.     Plugin.Command(VisComp,'"'..fn..'"')
  170.  
  171.   end
  172.  
  173. end
  174.  
  175. }
Плагин запускается по Ctrl`
Panel.VisualCompare.rar
(1.79 KiB) Downloaded 242 times
 ! Message from: John Doe
Аналогичные макросы:
Last edited by John Doe on Tue 06 Jul, 2021 15:56, edited 4 times in total.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Многовариантный макрос для Visual Compare

Post by fml2 »

Latest post of the previous page:

Я уже некоторое время пользуюсь этим скриптом, а недавно немного расширил его, чтобы можно было сравнивать как с помощью VisualCompare (у меня -- Ctrl+7), так и с помощью BeyondCompare (у меня -- Ctrl+Shift+7).

Я просто выделил логику определения файлов, которые надо сравнивать, в функцию, а потом определил два макро, вызывающие разные инструменты сравнения.

siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Многовариантный макрос для Visual Compare

Post by siberia-man »

Дальнейшее развитие скрипта:
-- Возможность указать свой любимый "сравниватель"
-- Вывел основную логику обработки в отдельную функцию
-- Горячие клавиши вынесены наверх скрипта для "простоты конфигурирования"
-- Косметические изменения в коде

Last edited by siberia-man on Wed 17 Mar, 2021 03:27, edited 2 times in total.
Post Reply

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