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.
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.
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.
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
-
DirSync3 v1.12
17.10.2021: Binárky (1016 KB), Zdroják (1426 KB)
Opravena chyba, kdy se do seznamu změn zapisovalo vždy jméno z levého souboru – nyní se použije jméno novějšího souboru; má to smysl typicky v případech, kdy se změnila velikost písmen v názvu souboru. Aktualizovány používané komponenty a vyčištěny zdrojové kódy.
Staré verze
-
DirSync3 v1.11
11.10.2020: Binárky (1023 KB), Zdroják (1430 KB)
Všechny podporované funkce jsou nyní skriptovatelné pomocí LUA maker. S tím souvisí možnost zakázat interní klávesové zkratky. Nová volba umožňující měnit směr (ALT+F1/F2) i na nekompletních blocích. Hromadné operace je možné vrátit pomocí jednoho Undo (CTRL+Z). Nastavení se nyní ukládají, jen pokud se skutečně změnila. A další drobná vylepšení.
-
DirSync3 v1.10
6.3.2020: Binárky (998 KB), Zdroják (1401 KB)
Podpora pro adresáře se zacyklenou strukturou (jako profily ve Windows). Při mazání odkazů na adresáře jsou nyní smazány jen odkazy, ne i obsah. Synchronizace nyní funguje správně i v případě, že je některý ze souborů nečitelný nebo poškozený. Podpora pro PluginCall interface (skriptování z LUA maker). Implementovány horké klávesy pro přímý skok na soubor, na kterém je v editoru kurzor, v panelech. Doplněna volitelná podpora pro case-sensitive porovnání jmen souborů. Porovnávání dvou totožných adresářů (včetně symbolických odkazů a junctions) se nyní neprovádí, adresáře se rovnou považují za shodné. A mnoho dalších úprav.
-
DirSync3 v1.03
27.1.2019: Binárky (969 KB), Zdroják (1336 KB)
Kompletně přepsáno na nový framework, který umožní snadnější údržbu a rozšiřování. Podpora pro kompilaci verzemi Delphi do 10.3 Rio. Opraveno zapamatovávání adresářů. Opraveny funkce pro ignorování rozdílů v bílých znacích nebo koncích řádek – nyní už fungují. Drobné úpravy UI.
-
DirSync3 v1.02
28.7.2017: Binárky (1052 KB), Zdroják (1406 KB)
Při prvním zobrazení editoru se kurzor umístí na první synchronizační řádek. V příkazu pro vizuální porovnání jsou nyní expandovány proměnné prostředí mezi procenty (
%ProgramFiles%
). Opravena chyba při zavírání editoru, ze kterého byly smazány všechny soubory. V okně o průběhu operace už se nezobrazuje\\?\
. Lepší kontrola chybových stavů. -
DirSync3 v1.01
18.2.2017: Binárky (1050 KB), Zdroják (1400 KB)
Velmi dlouhé názvy souborů (nad 260 znaků) konečně fungují. Příkaz ke smazání adresáře automaticky znamená i smazání všech souborů v něm obsažených. Opraveno nesprávně překreslené okno po pokusu o přerušení operace pomocí ESC a následném pokračování. Do nově vytvářených adresářů se kopírují i (některé) atributy (např. HIDDEN pro adresáře
.git
). Po skončení synchronizace se panel automaticky překreslí. -
DirSync3 v1.00
26.7.2015: Binárky (1011 KB), Zdroják (1350 KB)
Plugin je nyní na PlugRinGu, kvůli tomu jsem musel mírně změnit jeho název. Vyčistil jsem jazykové soubory a doplnil jsem chybějící popis klávesových zkratek ALT+F5/F6 na spodním keybaru.
-
DirSync v0.97
23.7.2015: Binárky (1010 KB), Zdroják (1353 KB)
Podrobný popis naleznete v dokumentaci. Hlavní změny: Zapamatování nějaké akce je nyní nastavitelné jen pro určité adresáře a funguje logičtěji (pokud povolím smazat adresář, dává smysl, že to znamená i povolení mazat soubory v něm). Možnost označit rozdílné soubory na obou panelech (dosud se zobrazovaly jen na panelu, kde byl soubor novější). V editoru jsou horké klávesy pro přechod na další typ rozdílu.
- DirSync v0.96 (28.10.2014, 1107 KB)Obrovská spousta změn: Plugin jsem kompletně předělal, s původním má společné jen uživatelské rozhraní. V první řadě jsem ho přepsal do Delphi a zprovoznil pro FAR2 i FAR3, oba ve 32bitové i 64bitové verzi. Další hlavní novinky (podrobnosti v dokumentaci uvnitř archívu):
- Podpora pro velmi dlouhé názvy souborů (nad standardní limit 260 znaků)
- Zlepšeno a zpřehledněno uživatelské rozhraní, mimo jiné nyní všechny dialogy mají checkbox pro zapamatování si operace (jen pro aktuální synchronizační běh) nebo tlačítko pro zobrazení rozdílů mezi dotčenými soubory (používá se WinMerge nebo jiný váš oblíbený program).
- Speciální klávesové zkratky pro editaci levého či pravého souboru, změny synchronizační operace (včetně změny celého bloku), porovnání souborů nebo zobrazení informací o souborech. Tyto funkce jsou navíc dostupné přes menu v editoru, takže je možné je namapovat na jiné klávesy pomocí maker.
- Možnost vrátit se ze synchronizace zase zpátky do editoru a doladit vstupy.
- Možnost přednastavit synchronizační operaci pro případ, že se soubory liší, ale nelze rozhodnout, který je novější.
- Tichý režim – plugin napřed provede všechno, co může udělat bez uživatelského vstupu, a teprve potom udělá uživatelsky závislé věci. Takže se už nestane, že by synchronizaci zdržoval dotaz, jestli opravdu chcete přepsat cílový soubor.
- Po skončení synchronizace se, pokud došlo k nějakým chybám, které zabránily synchronizaci určitých souborů, znovu zobrazí synchronizační editor jen s těmito chybnými soubory.
- 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
aDirSyncEng.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).
Verze 1.12: Opravena chyba, kdy se do seznamu změn zapisovalo vždy jméno z levého souboru – nyní se použije jméno novějšího souboru; má to smysl typicky v případech, kdy se změnila velikost písmen v názvu souboru. Aktualizovány používané komponenty a vyčištěny zdrojové kódy.
Verze 1.11: Všechny podporované funkce jsou nyní skriptovatelné pomocí LUA maker. S tím souvisí možnost zakázat interní klávesové zkratky. Nová volba umožňující měnit směr (ALT+F1/F2) i na nekompletních blocích. Hromadné operace je možné vrátit pomocí jednoho Undo (CTRL+Z). Nastavení se nyní ukládají, jen pokud se skutečně změnila. A další drobná vylepšení.
Verze 1.10: Podpora pro adresáře se zacyklenou strukturou (jako profily ve Windows). Při mazání odkazů na adresáře jsou nyní smazány jen odkazy, ne i obsah. Synchronizace nyní funguje správně i v případě, že je některý ze souborů nečitelný nebo poškozený. Podpora pro PluginCall interface (skriptování z LUA maker). Implementovány horké klávesy pro přímý skok na soubor, na kterém je v editoru kurzor, v panelech. Doplněna volitelná podpora pro case-sensitive porovnání jmen souborů. Porovnávání dvou totožných adresářů (včetně symbolických odkazů a junctions) se nyní neprovádí, adresáře se rovnou považují za shodné. A mnoho dalších úprav.
Díky za tehnle plugin. Používal jsem Total Commander bezmála 20 let a teď přecházím na FAR manager protože si TC nesmím nainstalovat na firemním počítači. Tenhle plugin opravdu byla killer-featura TC, takže mi DirSync3 přestup výrazně usnadnil.
Verze 1.03: Kompletně přepsáno na nový framework, který umožní snadnější údržbu a rozšiřování. Podpora pro kompilaci verzemi Delphi do 10.3 Rio. Opraveno zapamatovávání adresářů. Opraveny funkce pro ignorování rozdílů v bílých znacích nebo koncích řádek – nyní už fungují. Drobné úpravy UI.
Verze 1.02: Při prvním zobrazení editoru se kurzor umístí na první synchronizační řádek. V příkazu pro vizuální porovnání jsou nyní expandovány proměnné prostředí mezi procenty (%ProgramFiles%). Opravena chyba při zavírání editoru, ze kterého byly smazány všechny soubory. V okně o průběhu operace už se nezobrazuje \\?\. Lepší kontrola chybových stavů.
Verze 1.01: Velmi dlouhé názvy souborů (nad 260 znaků) konečně fungují. Příkaz ke smazání adresáře automaticky znamená i smazání všech souborů v něm obsažených. Opraveno nesprávně překreslené okno po pokusu o přerušení operace pomocí ESC a následném pokračování. Do nově vytvářených adresářů se kopírují i (některé) atributy (např. HIDDEN pro adresáře .git). Po skončení synchronizace se panel automaticky překreslí.
Díky za snahu. Budu zkoušet ve volném čase, hledat problém a případně se ozvu f čem byl problém. Hezké dny.
Regine Martin: Tak to opravdu nevím, jak poradit. Vzal jsem teď čistý FAR 3.0.4499, přihrál k němu DirSync 1.00, spustil, dal synchronizovat dva adresáře a editor se mi normálně otevřel tak, jak má. Netuším, co u tebe může být špatně, nevidím pro to důvod. Ani vytváření a otvírání souboru s výsledky by nemělo vadit, to se děje v TEMPu uživatele, tzn. práva by to měla bez problémů umožňovat.
Zkouším 32bit, nechávám interní editor. TMP soubor s výsledkem se mi ale neotevírá. Dívám se do možností „Nastavení“, není v něm nic, co by bránilo otevření výsledku. V jaké složce/adresáři by měl být dočasný TMP soubor s výsledkem?
FAR má svůj interní editor (a výborný). Ten právě používám, naopak by mohlo dělat problémy, kdyby ses snažil použít externí. Také bych pro začátek nepoužíval 64bitový FAR, protože 64bitové verze mého pluginu nejsou nijak testovány.
add 3) Editor se mi neotvírá. Asi musím FAR někde nastavit, co má použít za editor.
Mám smůlu. Zkouším na:
– Windows 8.1 (32bit verzi FAR)
– Windows Server 2012 (64bit verzi FAR)
Děkuji.
Regine Martin: Upřímně řečeno, vůbec mě nenapadlo psát nějaký návod pro začátečníky, protože FAR Manager fakt není program, který by byl pro začátečníky vhodný, a plugin na to úspěšně navazuje :-).
Postup by měl být:
1) Otevřu v levém a pravém panelu adresáře, které chci synchronizovat.
2) F11, DirSync, nastavím parametry porovnávání a OK.
3) Proběhne porovnání adresářů, na konci se rovnou otevře editor se změnami.
4) Oedituju, co potřebuju, uložím soubor, ESC.
5) Zobrazí se formulář pro výběr parametrů synchronizace.
6) Nastavím, co a jak chci synchronizovat, OK.
Poprvé užívám FAR i DirSync3. Dojdu po krok, kdy se mi zobrazí po F11 rozdíly žlutým podsvícením. Ale nevím, jak dál. Kde je soubor „předání seznamu rozdílů uživateli“? Nějak na stránkách chybí step-by-step návod pro laiky. Díky za odpověď. Hezký den.
Verze 1.00: Plugin je nyní na PlugRinGu, kvůli tomu jsem musel mírně změnit jeho název. Vyčistil jsem jazykové soubory a doplnil jsem chybějící popis klávesových zkratek ALT+F5/F6 na spodním keybaru.
Publikována verze 0.97.
Publikována kompletně předělaná verze 0.96 s mnoha vylepšeními.
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 paneluCTRL+F2
editovat soubor v pravém paneluALT+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í WinMergeIgor Yudincev plugin přepsal („quick and dirty adaptation“) pro unicode, tzn. pro FAR 2.0. K downloadu na FAR fóru.
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).
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
No, trochu se takové volby bojím, ale třeba časem…
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