FAR Manager: Synchronize Directory

Jak už jsem tu jednou uváděl, pro správu souborů používám FAR Manager. Uznávám, že Total Commander je mnohem rozšířenější, ale mě prostě svými funkcemi a svým ovládáním nevyhovuje. Přesto existuje jedna featura, kterou jsem uživatelům Total Commanderu vždy záviděl – synchronizace adresářů (Synchronize folders). FAR má v základu jenom jednoduché porovnání, které označí rozdílné soubory, a podobnou funkčnost (ale jenom tu!) nabízejí i dostupné pluginy (Advanced Compare, Deep Compare apod.). V průběhu let jsem se už dlouho zabýval možností, napsat si vlastní synchronizační plugin, ale lenost byla vždy silnější než potřeba. Ale přeci jenom kód postupně přibýval a dnes už mám plugin funkční. Download naleznete dále ve článku.

Cílem, kterého jsem chtěl dosáhnout, je obdoba toho, co dělá funkce Synchronize Folders v Total Commanderu – zjistit rozdíly mezi levým a pravým panelem, nabídnout uživateli jejich seznam s možností případných úprav (vyřadit některé soubory ze synchronizace nebo změnit směr, kterým se ten který soubor bude synchronizovat), a nakonec provést vlastní synchronizaci. Přitom jsem ovšem chtěl dodržet zvyklosti z FARu, speciálně to, aby všechno šlo dělat co možná hromadně a s využitím všech možných silných pluginů, které už ve FARu jsou.

Při psaní pluginu jsem vyšel ze zdrojového kódu pluginu Advanced Compare, který už první část synchronizace – zjištění rozdílných souborů – dělá. I tuhle část jsem ovšem musel trochu doplnit – jednak jsem chtěl zobrazit informaci o průběhu porovnávání, protože plugin mimo jiné používám pro porovnávání vypálených šifrovaných DVD se zdrojovými daty a informace „porovnávám soubor X“ mě příliš neuspokojuje, pokud má soubor X 4 GB a porovnání trvá řadu minut. Druhá potřebná změna spočívá v tom, že narozdíl od prostého porovnání obsahu se při synchronizaci nemohu spokojit s tím, že „v adresáři Y jsou rozdíly“ a pokračovat dalším adresářem.

Nastavení parametrů jsem převzal téměř beze změny.

Druhý krok je předání seznamu rozdílů uživateli, ať si vybere, co se má dělat. Total Commander to řeší extra oknem, kde si uživatel myší zakliká, co potřebuje. To by šlo těžce proti filozofii FARu (ovládání z klávesnice, znovupoužívání existujícího kódu a funkcí), nehledě na drobný detail, že napsat takový dialog ve FARu by byla neskutečná dřina. Šel jsem tedy jinou cestou – poté, co naleznu všechny rozdíly, otevřu v editoru okno s jejich seznamem. Na začátku je hlavička, která uživateli připomene, co se porovnávalo, následuje seznam souborů ve speciálním formátu (jednoduchá šipka značí změněný soubor, dvojitá šipka soubor, který v jednom z panelů neexistuje, „nerovnítko“ symbolizuje rozdíl, u kterého nelze rozhodnout, který ze souborů je novější). Uživatel může snadno vyřadit soubor ze synchronizace (tím, že jeho řádek smaže) nebo změnit směr (tím, že přepíše „šipku“). Může využít všech možností, které mu editor nabízí, speciálně sloupcových bloků a regulárních výrazů (např. hromadné vyřazení všech dočasných souborů je otázkou jednoho jednoduchého search-and-replace). Může se (standardní klávesou CTRL+TAB) přepnout do panelů a na soubory, u kterých si není jistý, se podívat. Atd.

Seznam nalezených změn.

Po skončení práce se seznamem rozdílů se uživateli nabídne dialog, jak se má synchronizovat. Cancel synchronizaci zruší a celá synchronizace se tak vlastně zredukuje na to samé, co dělá standardní Advanced Compare, jen s tím rozdílem, že uživatel dostal seznam rozdílů i v textovém souboru a ne jen v podobě označení rozdílných souborů. OK provede ty synchronizace, které si uživatel vybral, a volitelně se u každého souboru zeptá, co s ním.

Dotaz na synchronizaci.
Dotaz, co dělat s existujícím souborem.

No a to je vlastně všechno. Uvnitř programu je pár drobných detailů, které nemusí být úplně zřejmé (je například možné spustit několik synchronizací současně), ale to už jsou opravdu jen detaily. Samozřejmě je co zlepšovat. V první řadě už jenom to, že plugin je napsán v jazyku C, ve kterém se vůbec necítím silně (jsem schopen ho číst a dělat jednoduché změny, ale neznám dostupné knihovny a všechny operace řeším jen s pomocí několika málo základních metod – to je ostatně důvod, proč je plugin napsaný tak, jak je napsaný – chtěl jsem svoje zásahy do původního kódu udržet co možná nejjednodušší a na jednom místě), takže naprosto nepochybuju o tom, že by šel podstatně zoptimalizovat. Navíc nemohu vyloučit, že zůstaly nějaké chyby – zatím jsem nepronikl do tajemství, jak vlastně debugovat Cčkovské programy jinak než zařazením kontrolních tisků na vhodná místa a sledováním, jestli v nich nejsou úplné blbosti.

Z funkčního hlediska má prvořadý význam přepis celého pluginu do nového rozhraní – stávající kód vychází ze zdrojáků FARu verze 1.70, která už je poněkud postarší. Určitě by stálo za to, aby plugin vycházel ze zdrojáků verze 2.0 a měl tedy plnou podporu Unicode; i stávající verze sice ve FARu 2.0 funguje (ani se mi tomu nechtělo věřit!), ale jenom za předpokladu, že všechny názvy souborů budou reprezentovány v OEM kódování (v našich šířkách tedy nejspíš CP852).

Výhledově bych rád přišel na možnost, jak udělat synchronizaci mezi nesouborovými (pluginovými) panely: Teď jsou plně podporovány jen souborové panely (klasické adresáře, včetně síťových cest), pluginové panely (například FTP nebo obsah archívů) jsou podporovány jen pro operaci zjištění rozdílů, a to ještě jen částečně (porovnat lze jen aktuální adresář, ne jeho podadresáře). Ale to je zřejmě hudba vzdálené budoucnosti.

Download

Synchronize Directory v0.02 (30.8.2009, 39 KB) – obsahuje základní dokumentaci a jazykový soubor pro ruštinu.

Synchronize Directory v0.01 (29.8.2009, 37 KB). V archívu najdete jednak plugin samotný (soubory DirSync.dll a DirSyncEng.lng – stačí je zkopírovat kamkoliv do adresáře Plugins, ideálně ovšem do vlastního podadresáře), vedle něj také zdrojové kódy (adresář Source; kritizovat je nemusíte, vím, že moje Cčko stojí za starou bačkoru – dávám je spíš proto, kdyby někdo chtěl být aktivní a plugin přepsat pro FAR 2.0).

Podobné příspěvky:

6 Responses to “FAR Manager: Synchronize Directory”

  1. avatar pepak napsal:

    Pro plugin MacroLib a aktuální unicode verzi DirSync od Maximuse5 jsem upravil/přepsal makro soubor, který do editoru s otevřeným seznamem rozdílů zavádí následující klávesové zkratky:

    • CTRL+F1 editovat soubor v levém panelu
    • CTRL+F2 editovat soubor v pravém panelu
    • ALT+F1 změnit směr kopírování na „z pravého panelu do levého“
    • ALT+F2 změnit směr kopírování na „z levého panelu do pravého“
    • ALT+F3 porovnat levý a pravý soubor pomocí WinMerge
  2. avatar pepak napsal:

    Igor Yudincev plugin přepsal („quick and dirty adaptation“) pro unicode, tzn. pro FAR 2.0. K downloadu na FAR fóru.

  3. avatar pepak napsal:

    1) Cz není proto, že používám FAR v angličtině a nechtěl jsem to překládat bez znalosti českého překladu.

    2) Operace v synchronizačním okně by možná šly zařídit. Možná se na ně někdy podívám.

    3) Přepnutí editoru do hexa módu jde s vhodným pluginem docela snadno. Já používám HexEditor a v něm je to jen otázka vhodně nastaveného makra.

    4) Tvůrce FARu jde kontaktovat na http://www.farmanager.com, zejména na diskusním fóru (ma i anglickou část).

  4. avatar Martin napsal:

    Ahoj, když jsem před lety přecházel ze starého dobrého Norton Commanderu 5 na FAR, tak synchronizace adresářů byla JEDINÁ funkce, o kterou byl FAR chudší proti NC. Takže díky moc za toto vylepšení (ale proč není i DirSyncCz.lng, když je to od českého autora ?). Kéž by se toho chytli tvůrci FARu a dali to do základní verze a umožnili v synchronizačním okně podobné akce jako má Total Commander (zobrazit levý/pravý, smazat levý/pravý, porovnat podle obsahu, …). Dále bych ve FARu uvítal možnost i v EDITu se přepnout do HEX, jak to měl Volkov Commander 4.05. V ten okamžik už by FARu nic nescházelo k úplné dokonalosti. (Snad jen to, že při autodetekci kódové stránky mi nastavuje 1252 místo 1250). Omlouvám se, za postesky nesouvisející s Vaším pluginem, ale nevím kam je napsat. Máte-li na tvůrce FARu kontakt, prosím o přeposlání těchto návrhů jim. Moc děkuji. Martin

  5. avatar pepak napsal:

    No, trochu se takové volby bojím, ale třeba časem…

  6. avatar Luboš napsal:

    Ahoj, dík za tvůj plugin pro synchronizaci adresářů do FARu. Fakt je to dobrý a ve FARu mi to rovněž chybělo. K dokonalosti chybí jenom volba, zda soubory, které jsou v druhém panelu smazat, aby adresáře byly shodné. U externích synchronizačních programů je tato volba běžná. Tak dík za plugin… ahoj

Leave a Reply

Themocracy iconWordPress Themes