Многовариантный макрос для 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 244 times
 ! Message from: John Doe
Аналогичные макросы:
Last edited by John Doe on Tue 06 Jul, 2021 15:56, edited 4 times in total.
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: покритикуйте плз мой вариант макроса
Желательно файл с левой панели Фара выводить на левую же панель плагина. С правой — соответственно.

Необходима корректная работа с бранчами.

Комментарий бы, по возможности, покомпактней. Что-то типа: Description="VC: сравнить 2 выделенных файла на активной или на разных, или файлы под курсорами на разных, или вывести меню";

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

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

Post by LanKing »

Желательно файл с левой панели Фара выводить на левую же панель плагина. С правой — соответственно.
Сделано, залью с бранчами как только узнаю что:
Необходима корректная работа с бранчами.
Хоть вы мне скажите, что это за бранчи? Слышу-слышу всё про них..
User avatar
zg
zero-gravity
Posts: 6035
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

справа вверху есть поиск. вводите в нём «branch», читаете.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Читал уже, читал знакомую мне переписку в открытой мной теме в основном) Скажите, а?
User avatar
HaRT
Moderator
Posts: 10858
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

LanKing wrote: читал знакомую мне переписку в открытой мной теме в основном
Имейте совесть!
Там на первой же странице результатов поиска есть такие, которые приоткроют завесу этой тайны.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Гм, речь о Tree?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

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

Post by Max Rusov »

Плагин Branch. Считайте, то же, что Temporary Panel в поиске.
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: Хоть вы мне скажите, что это за бранчи? Слышу-слышу всё про них..
Вы же сами когда то спрашивали, и я предлагал альтернативу бранча:
LanKing wrote:
sToLp wrote:tmp:<dir /b /s /a-d
Тогда уж edit:<dir /b /s /a-d
Но я так понимаю, truebranch строил именно tree?
Но, похоже, Вы всё ещё смешиваете branch и tree.
LanKing wrote:Гм, речь о Tree?
Но это совершенно разные формы представления файлов и папок.
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Спасибо. Пишу.
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 »

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

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

Post by LanKing »

Гм, у меня так и есть) По-моему это вопрос настройки VC..
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 »

Настройки плагина не трогал. А макросы перепроверил на двух разных машинах в разных win7. Нативный макрос (идущий в поставке плагина) работает, как и раньше работал — правильно, а сабжевый — верхний выделенный файл посылает на правую панель плагина…
User avatar
LanKing
Posts: 180
Joined: Thu 31 Aug, 2006 20:39
Been thanked: 2 times

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

Post by LanKing »

Забавно, можно скриншот?
Post Reply

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