DirSync — синхронизация каталогов

Здесь можно обсудить ваш любимый плагин.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

DirSync — синхронизация каталогов

Post by Maximus5 »

Обсуждение плагина DirSync
Yegor
Posts: 1328
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: DirSync - синхронизация каталогов

Post by Yegor »

0.3.6 - бинарники самому собирать? :)
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: DirSync - синхронизация каталогов

Post by Maximus5 »

Никто запретить тебе этого не может :-P
Но можно и скачать
Yegor
Posts: 1328
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: DirSync - синхронизация каталогов

Post by Yegor »

Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: DirSync — синхронизация каталогов

Post by Wave »

Синхронизирую пару svn-репозиториев, репозиторий и экспорт… Как-то так, в общем. Это оказалось на удивление удобно делать, предварительно спрятав по CtrlH все папочки «.svn».
Всё очень классно… За одним исключением. Если плагин хочет перенести какую-то папку целиком, типа
<<== tags\palomnik\*
<--- trunk\index.php
<--- trunk\tpl\default\style.css
, то он и переносит её целиком, со всеми «.svn». А хотелось бы, раз уж они не участвуют в сравнении, и не переносить их.
Пользуюсь ФАРом больше 20 лет © собирательный.
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: DirSync — синхронизация каталогов

Post by Wave »

Спасибо за новую версию! То, что надо!
Пользуюсь ФАРом больше 20 лет © собирательный.
r-bin
Posts: 67
Joined: Fri 16 Jul, 2010 02:53
Has thanked: 1 time
Been thanked: 2 times

Re: DirSync — синхронизация каталогов

Post by r-bin »

v0.3.7
Не сохраняется сброшенное состояние "Use filter".
r-bin
Posts: 67
Joined: Fri 16 Jul, 2010 02:53
Has thanked: 1 time
Been thanked: 2 times

Re: DirSync — синхронизация каталогов

Post by r-bin »

v0.3.7, фар 2.0.1807 x86 XPx32.
Слева произвольный каталог, справа архив через арклайт. Нажимаем F11-Y, вызываем плагин. Жмем Esc - типа ничего не делаем. Опять жмём F11-Y.
Получаем ошибку и вылет фара стабильно:
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: DirSync — синхронизация каталогов

Post by Maximus5 »

r-bin wrote:v0.3.7
Не сохраняется сброшенное состояние "Use filter".
И не должно. Зачем?
r-bin
Posts: 67
Joined: Fri 16 Jul, 2010 02:53
Has thanked: 1 time
Been thanked: 2 times

Re: DirSync — синхронизация каталогов

Post by r-bin »

Maximus5 wrote:И не должно. Зачем?
Ну как бы это настройка вроде. Чтоб не пользоваться фильтрами (я не пользуюсь) - вот зачем. И, соответственно, для гарантированной полной синхронизации её лучше снимать. Зачем тогда вообще эта галка? Может я, и кто-нибудь ещё, хотят её держать отключенной раз она есть. Может сделать так, что если нет фильтров изначально (даже не знаю как ими пользоваться), то галочку не включать или вообще дисэйблить с кнопками фильтров?
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: DirSync — синхронизация каталогов

Post by Maximus5 »

Я не знаю способа проверить включены ли фильтры на панели (такого нет похоже)
Включение флажка означает, что обработано будет ровно то, что видимо на панели. И это правильно)
Если вы фильтрами вообще не пользуетесь, то и беспокоиться не о чем)

Кстати, раньшы все было точно так же, просто включенного флажка не было. Никто не жаловался
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: DirSync — синхронизация каталогов

Post by Wave »

Макрос Copy left to right не убирает имеющуюся стрелку, в результате получается <------>, а если вручную сначала убрать, получится «current line is not difference info». Ну, макрос достаточно просто поправить…
P.s. И неплохо бы доработать до варианта «сразу несколько строк копировать в нужную сторону». Правда, слабо себе это представляю. Разве что не снимать выделение в процессе…

Что означает --->, а что ==>>? И почему в макросе нет ==>>?
Хотя, кажется, понял — это то, чего на другой панели нет?

Как удалить «лишние» файлы с одной из панелей? А то я что-то не понял.
Пользуюсь ФАРом больше 20 лет © собирательный.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: DirSync — синхронизация каталогов

Post by Maximus5 »

Ну и где исправленный макрос? У меня он работает без ошибок.

===> означает что файл есть только слева. соответственно в макросе это нафиг не нужно. при синхронизации плагину важно только направление. остальное - инфа для пользователя

удалить - флажками в диалоге по закрытию редактора
User avatar
Wave
Posts: 1885
Joined: Thu 04 Aug, 2005 18:47
Has thanked: 14 times
Been thanked: 26 times

Re: DirSync — синхронизация каталогов

Post by Wave »

А что там исправлять.
CtrlU Home $Rep(4) ShiftRight $end print("<---") Right
заменить на
CtrlU Home $Rep(4) ShiftRight $end CtrlD print("<---") Right
или, скажем,
Home $Rep(4) Right $end $Rep(4) BS $end print("<---") Right

А о многострочной замене я пока только в общих чертах думал. Не использовать ShiftRight и CtrlU, добавить цикл, в конце которого сдвиг курсора Down и проверка, всё ещё выделенная область или как… Есть такая функция в писании? Ну и после цикла сделать CtrlU.
Или задействовать CtrlF7\RESearch.
Пользуюсь ФАРом больше 20 лет © собирательный.
pepak
Posts: 604
Joined: Sun 13 Jul, 2008 11:18
Has thanked: 17 times
Been thanked: 54 times

DirSync — Synchronize Directories

Post by pepak »

It's my first attempt at FAR's macro language, so please bear with me and point out any errors I made. The code is heavily based on the original Maximus5's code, except that I opted to remove dependency on menu, and use a number of keys instead:
- ALT+F1 = copy to left
- ALT+F2 = copy to right
- ALT+F3 = compare using WinMerge (or any other external utility)
- CTRL+F1 = edit left
- CTRL+F2 = edit right
The code for ALT+F3 seems especially cumbersome to me, surely there is a better way to do it?

Code: Select all

// Far2
const DirSyncID = 0x44725363
// Far3
//const DirSyncID = "F5AE7C40-F8D0-443E-82A4-285DBFB4FF69"

macro Descr="DirSync - edit left" Area="Editor" Key="CtrlF1"
{{
  $if (callplugin(#%DirSyncID,1)==0) $Exit $end
  $if (env("DirSyncFileInfo")=="")
    MsgBox("DirSync info","Current editor is not DirSync report\nor current line is not difference info",1)
    $Exit
  $end

  $if (!fexist(env("DirSyncFileLeft"))) 
    MsgBox("DirSync info","File on the left does not exist",1)
    $Exit 
  $end
  ShiftF4 print(env("DirSyncFileLeft")) Enter
}}

macro Descr="DirSync - edit right" Area="Editor" Key="CtrlF2"
{{
  $if (callplugin(#%DirSyncID,1)==0) $Exit $end
  $if (env("DirSyncFileInfo")=="")
    MsgBox("DirSync info","Current editor is not DirSync report\nor current line is not difference info",1)
    $Exit
  $end

  $if (!fexist(env("DirSyncFileRight"))) 
    MsgBox("DirSync info","File on the right does not exist",1)
    $Exit 
  $end
  ShiftF4 print(env("DirSyncFileRight")) Enter
}}

macro Descr="DirSync - copy to left" Area="Editor" Key="AltF1"
{{
  $if (callplugin(#%DirSyncID,1)==0) $Exit $end
  $if (env("DirSyncFileInfo")=="")
    MsgBox("DirSync info","Current editor is not DirSync report\nor current line is not difference info",1)
    $Exit
  $end

  $if (!fexist(env("DirSyncFileRight"))) 
    MsgBox("DirSync info","File on the right does not exist",1)
    $Exit 
  $end
  Home Del Del Del Del print("<---") Right
}}

macro Descr="DirSync - copy to right" Area="Editor" Key="AltF2"
{{
  $if (callplugin(#%DirSyncID,1)==0) $Exit $end
  $if (env("DirSyncFileInfo")=="")
    MsgBox("DirSync info","Current editor is not DirSync report\nor current line is not difference info",1)
    $Exit
  $end

  $if (!fexist(env("DirSyncFileLeft"))) 
    MsgBox("DirSync info","File on the left does not exist",1)
    $Exit 
  $end
  Home Del Del Del Del print("--->") Right
}}

macro Descr="DirSync - compare" Area="Editor" Key="AltF3"
{{
  $if (callplugin(#%DirSyncID,1)==0) $Exit $end
  $if (env("DirSyncFileInfo")=="")
    MsgBox("DirSync info","Current editor is not DirSync report\nor current line is not difference info",1)
    $Exit
  $end

  $if (!fexist(env("DirSyncFileLeft"))) 
    MsgBox("DirSync info","File on the left does not exist",1)
    $Exit 
  $end
  $if (!fexist(env("DirSyncFileRight"))) 
    MsgBox("DirSync info","File on the right does not exist",1)
    $Exit 
  $end

  // Switch to panels
  %PanelCount=0;
  $While (!Shell)
    %PanelCount=%PanelCount+1;
    CtrlTab
    $End

  // Save command line
  $If (!CmdLine.Empty) 
    %Flg_Cmd=1;
    %CmdCurPos=CmdLine.ItemCount-CmdLine.CurPos+1;
    %CmdVal=CmdLine.Value; 
    Esc 
  $End

  // Run the compare
  print("winmerge \"")
  print(env("DirSyncFileLeft"))
  print("\" \"")
  print(env("DirSyncFileRight"))
  print("\"")
  Enter
  sleep(100)

  // Restore command line
  $If (%Flg_Cmd==1) 
    $Text %CmdVal
    %Flg_Cmd=0; 
    %Num=%CmdCurPos;
    $While (%Num!=0) 
      %Num=%Num-1; 
      CtrlS 
    $End 
  $End

  // Return back
  $While (%PanelCount > 0)
    %PanelCount=%PanelCount-1;
    CtrlShiftTab
    $End
  $Exit;

}}
Last edited by pepak on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: moved from http://forum.farmanager.com/viewtopic.php?f=39&t=4479
Post Reply

Return to “Обсуждение плагинов”