[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Здесь обсуждается всё, что касается макросов.
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by siberia-man »

Предлагаю небольшой скрипт, обертку над плагином Visual Compare Максима Русова http://plugring.farmanager.com/plugin.php?pid=856.

Описание

Обертка для плагина Visual Compare. Скрипт ожидает, что два одноименных элемента располагаются на обеих панелях и сравнивает их, вызывая плагин. Использование скрипта гарантирует что панели плагина будут расположены в том же порядке, что и панели менеджера.

Установка

1. Сохранить скрипт в каталог lua-модулей:

Code: Select all

%FARPROFILE%\Macros\modules
2. Создать следующий пункт меню в Главном меню (вызываемом по нажатию F2):

Code: Select all

:  Visual Compare
    lua:@"%FARPROFILE%\Macros\modules\Plugin.Menu.VisualCompare.lua"
Требования

Скрипт разрабатывался и тестировался в следующем окружении (предполагается, более поздние версии совместивы):
-- Far Manager v3.0 build 4040
-- Visual Compare plugin 1.16+

Исходный код

User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by Wave »

Неудобная штука. Зачем обязательно одноимённые элементы? Неужели ни разу не приходилось сравнивать разноимённые? file1.cpp и file1.bak? А как насчёт выделенных элементов?
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by John Doe »

Вот старая тема с более функциональными макросами: http://forum.farmanager.com/viewtopic.php?f=15&t=1073 (не lua).
Или Plugin_VisualCompare.lua, из набора SimSU: http://forum.farmanager.com/viewtopic.php?f=60&t=7075.
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by siberia-man »

я долго пользовался examdiff - GUI программа для сравнения. Хорошая, но потом перешел на viualcompare, оба запускались практически одинаково:

Code: Select all

if exist "!#!\!^!.!" vc:"!#!\!^!.!" "!\!.!"
Но в обоих случаях я не мог решить проблему смены панелей (например, файл с активной левой файловой панели при сравнении оказывался справа).
Wave wrote: Неудобная штука
Wave wrote: еужели ни разу не приходилось сравнивать разноимённые?
кому как- я Вас не заставляю, а мне в самый раз. Приходилось, но очень редко. Подавляющее большинство сравнений приходится на одноименное содержимое каталогов. Разноименное в одном каталоге часто приходится сравнивать, но для этого штатных средств vc: имя1 имя2 достаточно.
John Doe wrote: Вот старая тема с более функциональными макросами
эти макросы имеют ту же самую проблему, что я описал в начале - "перемешивание" положения (исходное до и конечное при сравнении) сравниваемых файлов. Да и синтаксис убогий у фаровских макросов - никогда не принимал их всерьез.
John Doe wrote: из набора SimSU
а вот это гораздо лучше. Но его функцинал избыточен. Кстати, созерцание этого скрипта сподвигло меня на написание своего маленького велосипеда.
User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by Kerberos464 »

использую такой вот простецкий макрос для visual compare (сам макрос под макролиб), проблема перемешивания панелей в нём решена:

Code: Select all

macro Area="Shell" Description="Visual compare of two files (under cursors or selected on active panel)" Key="CtrlShiftC" SendToPlugin=0 Priority=1
{{
  Keys("Esc")
  mf.clip(5)
  Keys("CtrlIns")
  print("vc:")
  if  APanel.SelCount==2 then
    Keys("ShiftIns")
  else
    if  PPanel.Left then
      Keys("Tab")
      Keys("CtrlAltF")
      Keys("CtrlAlt;")
      Keys("Tab")
    else
      Keys("CtrlAltF")
      Keys("CtrlAlt;")
    end
  end
  Keys("Enter")
}}
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by ccaid »

Kerberos464 wrote:

Code: Select all

      Keys("Tab")
      Keys("CtrlAltF")
      Keys("CtrlAlt;")
      Keys("Tab")
так не проще:

Code: Select all

      Keys("CtrlAlt;")
      Keys("CtrlAltF")
?

второй момент связан с CtrlIns. для корректной работы с именами, в которых есть пробелы, требуется чтобы в настройках Far было включено обрамление кавычками. а для передачи имен файлов в буфер обычно, наоборот, требуется не использовать кавычки. противоречие можно разрешить отказом от CtrlIns и использованием CtrlAltF с соответствующим усложнением скрипта.
Фар делают добрые люди
User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 19 times
Been thanked: 1 time

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by Kerberos464 »

я макрос делал много лет назад, сейчас уже не припомню, почему именно так.
а про пробелы и кавычки - да, есть такое дело..
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by AleXH »

Пользуюсь таким вариантом , работает с сохранением расположения панелей, с двумя выделенными на одной панели, либо без выделения на разных панелях, имена, естественно, любые.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by sToLp »

AleXH wrote:... работает ... с двумя выделенными на одной панели ...
Что то у меня это не получилось. При двух выделенных на одной панели файлах макрос вызывает диалог сравнения папок.

А чем нативный то макрос плох? Тот, что идёт в поставке плагина.
В отсутствие выделенных вызывает диалог сравнения папок. А если файлы выделены, на одной панели или на разных, то сравнивается их содержимое. В левой части диалога — с левой панели, в правой — с правой.

А те, кто привык сравнивать файлы с разных панелей без выделения файлов, могут воспользоваться, например, макросом CyberWolf`а.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by AleXH »

sToLp wrote: Что то у меня это не получилось
Видимо не на те кнопки жали ;)
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by sToLp »

AleXH

Шутить изволите? А пользователь мучайся - гадай: почему макрос сбоит? :D

Просто он передаёт плагину имена двух выделенных на панели файлов не окавычивая их. С соответствующим результатом в определённых случаях.
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by AleXH »

Исправил :)
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by sToLp »

AleXH
однако задачи предложенного варианта макроса остаются смутными, посудите сами:

когда на активной панели выделены 2 файла, то сравниваются они
это то, что надо, а дальше сплошные непонятки:

когда на активной панели выделено больше или меньше 2-х файлов (т.е. и в том числе когда выделенных файлов нет совсем) и при этом курсоры на обеих панелях стоят на файлах, то сравниваются эти файлы под курсорами, даже если на панелях есть по одному (другому) выделенному файлу
то есть, если выделить по одному файлу на каждой панели, то далеко не факт, что сравниваться будут именно они — для этого надо ещё чтобы и курсоры стояли на них

когда курсоры на обеих панелях стоят на .., то сравнивается содержание папок верхнего! уровня
как вызвать макросом сравнение содержания папок на панелях — не понятно

когда курсор на одной панели стоит на .., а на другой — на файле, то сравниваются содержимое папки верхнего уровня панели, на которой курсор стоит на .., и, что совсем удивительно, файла, на котором стоит второй курсор, интерпретируемого как папка!
и какой это может иметь смысл не понятно
AleXH
Posts: 1000
Joined: Sun 12 Apr, 2009 05:21
Been thanked: 1 time

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by AleXH »

sToLp wrote: когда на активной панели выделено больше или меньше 2-х файлов (т.е. и в том числе когда выделенных файлов нет совсем) и при этом курсоры на обеих панелях стоят на файлах, то сравниваются эти файлы под курсорами, даже если на панелях есть по одному (другому) выделенному файлуто есть, если выделить по одному файлу на каждой панели, то далеко не факт, что сравниваться будут именно они — для этого надо ещё чтобы и курсоры стояли на них
смысл в том, что независимо от выделенного на обоих панелях сравниваются только те файлы, что под курсором. И только если выделено 2 файла на панели, то сравниваются именно они. Почему так? - Потому что нет смысла в выделении по одному файлу на разных панелях - это лишние и не нужные нажатия INS.
sToLp wrote: когда курсор на одной панели стоит на .., а на другой — на файле, то сравниваются содержимое папки верхнего уровня панели, на которой курсор стоит на .., и, что совсем удивительно, файла, на котором стоит второй курсор, интерпретируемого как папка! и какой это может иметь смысл не понятно
Предполагается, что пользователь в адеквате и понимает, что он хочет сравнить.
sToLp wrote: когда курсоры на обеих панелях стоят на .., то сравнивается содержание папок верхнего! уровнякак вызвать макросом сравнение содержания папок на панелях — не понятно
До сих пор у меня востребовано не было, но обработку этой ситуации как сравнение текущих папок, бесспорно добавить полезно:
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

[VisualCompare] Срипт для запуска плагина из Главного меню FAR

Post by sToLp »

AleXH wrote:нет смысла в выделении по одному файлу на разных панелях - это лишние и не нужные нажатия INS.
Не могу с этим согласиться. На каком файле стоит курсор на пассивной панели пользователю не видно, если он не выделен.
AleXH wrote:Предполагается, что пользователь в адеквате и понимает, что он хочет сравнить.
Вполне адекватный пользователь, отчётливо понимающий, что он хочет сравнить, запросто может ошибиться, особенно с учётом выше сказанного. И ставить его в условия получать в таком случае чудаковатый результат — далеко не лучшее решение.

Поэтому для себя делаю окончательный вывод о том, что на текущий момент самый подходящий макрос — сабжевый.
Тот, что идёт в поставке плагина.
В отсутствие выделенных вызывает диалог сравнения папок. А если файлы выделены, на одной панели или на разных, то сравнивается их содержимое. В левой части диалога — с левой панели, в правой — с правой.

А те, кто привык сравнивать файлы с разных панелей без выделения файлов, могут дополнительно воспользоваться макросом CyberWolf`а.
При этом благодарю Вас за предоставленную полезную возможность ознакомления с предложенными Вами вариантами макроса!
Post Reply

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