Многовариантный макрос для 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.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Latest post of the previous page:

Забавно, можно скриншот?
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

LanKing wrote:можно скриншот?



И на всякий случай файлы прикладываю.
Attachments
VC_plu_lua.7z
файлы с рабочими макросами
(2.69 KiB) Downloaded 131 times
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Теперь понял) Спасибо! Тот же ф-ционал НЕ реализован и у AleXH, можете и ему написать, а я сделал это условие в прошлой версии но ошибся в нём. Исправил, обновление в шапке. И - благодарю за толковую мысль и внимательность!
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

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

Post by sToLp »

LanKing
Кажется, Вас вполне можно поздравить с формированием добротного универсального макроса для работы с замечательным плагином Visual Compare! Ведь он не только объединил в одно целое полезные свойства ранее созданных для этого макросов, а и дополнил их, и тем самым сделал работу с плагином ещё более приятной.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

Никакого бага нет - я мыслю иначе, и как мне кажется моя логика более "нативна" - при файлах на разных панелях, каждый открывается в своей панели, а при 2-х файлах на панели 1-й открывается в своей панели, а второй в другой.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

AleXH wrote:Никакого бага нет - я мыслю иначе, и как мне кажется моя логика более "нативна" - при файлах на разных панелях, каждый открывается в своей панели, а при 2-х файлах на панели 1-й открывается в своей панели, а второй в другой.
Возможно, а возможно мы о разных вещах.

На правой панели выделите 2 файла и запустите ваш макрос -> второй файл окажется в левой панели а первый - в правой.
Логичнее наоборот.

P.S. Я премного благодарен вам за ваш макрос и изящную логику в нём. Действительно классный код!
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

sToLp, Спасибо за поддержку)
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

LanKing, вы меня процитировали, но саму цитату не прочли.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Ну такое, вывернутая логика имхо, но хозяин-барин.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

LanKing, - Моя логика прозрачна как слеза младенца, ибо описывается простым лаконичным алгоритмом - ищем выделенные файлы на панели, первый найденный открываем на этой панели, второй на другой панели. Эта логика описывает ВСЕ варианты сразу, будь то 2 выделенных файла на панели или один. Обратите внимание, что в приведённом алгоритме нет ветвлений по условиям, он предельно прост и доступен для понимания.

Теперь опишите ваш алгоритм и вы поймёте, что проблемы с логикой в вашем случае.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Это спор о вкусах.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

Не в данном случае, ведь говоря
LanKing wrote: вывернутая логика
вы подразумеваете, что предложенный мною алгоритм, в отличие от предложенного вами, содержит в себе логический изъян, приводящий к неинтуитивному поведению.

Теперь давайте посмотрим - если пользователь захочет поменять расположение открываемых для сравнения файлов местами, то в моём алгоритме он нажимает CtrlU - панели меняются местами, и то же произойдёт и со сравниваемыми файлами, поскольку в моём алгоритме первый файл открывается в своей панели. - Ожидаемо? -Ожидаемо. Интуитивно? - Интуитивно. - А что произойдёт в вашем случае? Ваш алгоритм, это как мышь для правшей - левше в руку уже не ложится.

Для ещё большей наглядности логического изъяна вашего алгоритма приведу гипотетический пример. Предположим, фартим научил редактор открываться в панели. Открытие файла на правой панели, согласно вашего алгоритма, приводило бы к открытию его в левой панели - интуитивно?
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

AleXH wrote: вы подразумеваете, что предложенный мною алгоритм, в отличие от предложенного вами, содержит в себе логический изъян, приводящий к неинтуитивному поведению.
Для меня - да.
AleXH wrote: рим - если пользователь захочет поменять расположение открываемых для сравнения файлов местами, то в моём алгоритме он нажимает CtrlU - панели меняются местами, и то же произойдёт и со сравниваемыми файлами, поскольку в моём алгоритме первый файл открывается в своей панели. - Ожидаемо? -Ожидаемо. Интуитивно? - Интуитивно. - А что произойдёт в вашем случае? Ваш алгоритм, это как мышь для правшей - левше в руку уже не ложится.
Ерунда, у меня сохранится та же логика - верхний файл в левой панели, нижний в правой. Независимо от того, в какой панели они были открыты. Это актуально и относительно вашего последнего абзаца.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

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

Post by AleXH »

LanKing wrote: Ерунда, у меня сохранится та же логика - верхний файл в левой панели, нижний в правой. Независимо от того, в какой панели они были открыты.
В этом и соль - если человеку требуется поменять открытые файлы местами, то в вашем случае это невозможно. Какой из файлов будет в панели верхним - зависит от сортировки, а если она по времени изменения и вы правите файлы, то верхним может быть любой из двух файлов, что не всегда и не всем удобно.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Ок.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

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

Post by fml2 »

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

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

Post Reply

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