Emacs pro mírně pokročilé (7): Dired mód aneb správce souborů v Emacsu

24. 5. 2001
Doba čtení: 5 minut

Sdílet

Při používání editoru na práci s více soubory se často nevyhneme nutnosti soubory přesouvat, kopírovat, mazat apod. Obvykle k tomu slouží nějaký souborový manažer či obyčejná příkazová řádka. Emacs však i pro tyto účely přichází s alternativou, kterou je dired mód.
Dired mód

neboli editor adresářů vytváří buffer s obsahem adresáře (a volitelně s obsahem některých podadresářů). Pro pohyb v tomto bufferu lze používat běžné příkazy Emacsu pro pohyb v bufferu a některé speciální dired příkazy. Mód spustíme buď klávesovou zkratkou C-x d, nebo pomocí M-x dired. Po zadání adresáře nebo masky pro jména souborů, které se mají zobrazit, se vytvoří samotný dired buffer. Kromě již zmíněných běžných kláves pro pohyb po bufferu jsou navíc předefinovány klávesy <SPC> pro posun vpřed a <DEL> pro posun vzad.

Dired mód rozlišuje tzv. příznaky (flags) a značky (marks). První označují soubory určené ke smazání, druhé označují soubory pro další hromadnou práci s nimi. Oba dva druhy označování se hojně používají při práci s více soubory a je důležité je správně rozlišit. Tak například klávesa d je namapována na označování příznaky (flags) pro mazání, klávesa u  na odstraňování těchto příznaků. Příznaky se nastavují souborům, na kterých je umístěn kurzor. Samotné smazání se provede až stiskem klávesy x. Soubory označené příznakem pro smazání jsou v bufferu vyznačeny velkým písmenem D. Před samotným smazáním bude Emacs vyžadovat potvrzení v minibufferu. Kromě označování jednoho souboru lze označit pro mazání více souborů najednou. Například pomocí # označíme všechny automaticky uložené soubory (jejichž jména Emacs ohraničuje právě tímto symbolem), klávesou ~ označíme všechny zazálohované soubory, ale jednoduše lze také (pomocí % d REGEXP označit soubory se jménem vyhovujícím regulárnímu výrazu.

Kromě mazání umožňuje dired mód další operace nad zobrazenými soubory. Klávesy f a <RET> otevírají soubor, na kterém se nachází kurzor. Další příkazy umožňují například otevřít soubor v jiném okně apod. V předchozím odstavci již byl zmíněn rozdíl mezi příznaky a značkami. Pro označování souborů značkami (marks) slouží zejména klávesa m, která označí soubor, na jehož jméně stojí kurzor. Jednoduše lze dále označovat spustitelné soubory ( * *), symbolické linky ( * @), adresáře ( * /). Označené soubory jsou zvýrazněny právě symbolem (hvězdičky). Další mnemotechnické pomůcky pro zmíněné klávesové zkratky pramení ze způsobu zobrazování, neboť / (lomítko) jsou v dired bufferu adresáře a @ symbolické linky (např. také volba --dired pro příkaz ls). Odstranění značky ze souboru pod kurzorem je namapováno na klávesu u. Kombinací ! lze například odstranit všechny značky, dále lze pokládat a odstraňovat značky na soubory s regulárními výrazy apod. Vyjmenovávat všechny možné kombinace by bylo nejspíš příliš nudné a zdlouhavé.

Je ovšem důležité si všimnout toho, že dired mód nepoužívá pouze jeden typ značek (již zmiňovanou hvězdičku), ale značkou může být libovolný znak. Například tedy posloupností * c OLD_MARKCHAR NEW_MARKCHAR lze zaměnit stávající značku (OLD_MARKCHAR) za novou (NEW_MARKCHAR). Díky tomu lze značky jednoduše zaměňovat a zpracovávat a třídit tak soubory podle mnoha kriterií. Například sekvencí * c D t * c SPC D * c t SPC označíme písmenem velké D (tedy ke smazání) všechny soubory, které nebyly označeny žádnou značkou a naopak, souborům, které byly označeny, značky odstraníme (předpokládáme, že žádný soubor nebyl označen písmenem  t).

Dále si povíme, jaké příkazy lze provádět v dired módu. Všechny následující příkazy jsou namapovány na klávesové zkratky velkých písmen a všechny vyžadují potvrzení nebo nějaký další vstup v minibufferu. Navíc všechny rozlišují, nad kterými soubory bude příkaz proveden. To lze ovlivnit numerickým argumentem, který příkazu říká, že se má provést na následujících N souborech, nebo označením souborů znakem hvězdička. Jinak je příkaz uplatněn pouze na soubor pod kurzorem. Většina příkazů mnemotechnicky odpovídá počátečním písmenům anglických slov odpovídajících operací. Při kopírování ( C) je třeba zadat nové jméno adresáře či souboru, podle toho, kolik souborů je označeno. Mazat lze kromě výše zmíněného i pomocí D. Přejmenování ( R) také vyžaduje argument s novým jménem. Příkazy H a S slouží pro vytváření pevných a symbolických odkazů.

Dired mód umožňuje také změny nastavení práv ( M) souborů nebo změny vlastníka ( O) či skupiny ( G) souborů. Soubory lze z dired bufferu tisknout ( P), ale také například prohledávat na výskyt daného vzorku (zadáním regulárního výrazu) v souboru (klávesa A; toto je další alternativa k již zmiňovaným TAGům) nebo nahrazovat daný vzorek jiným textem ( Q). A konečně nezbytnou operací každého správce souborů je vytvoření adresáře ( +). Kromě všech těchto příkazů lze spustit nějaký příkaz (pomocí !) na jeden či více souborů v dired bufferu. Příkaz lze spustit s argumentem *, která bude nahrazena jmény všech souborů, nebo s argumentem ?, kdy se příkaz provede zvlášť pro každý soubor a symbol otazníku zde odkazuje na konkrétní jméno (například uuencode ? ? > ?.uu volá program uudecode na všechny soubory v bufferu a ukládá výstup do souborů s příponou  uu).

Snadno lze v dired módu porovnávat soubory; pomocí klávesy = spustíme funkci dired-diff pro porovnání aktuálního souboru s jiným souborem, nebo jednoduše pomocí M-= porovnáme soubor s jeho záložní kopií. Lehce převedeme jména souborů z velkých na malá ( % l) a opačně ( % u; hodí se při přenosu souborů mezi různými systémy).

Zajímavá je práce s podadresáři v dired módu. Normálně se zobrazí pouze obsah jednoho konkrétního adresáře. Pomocí funkce dired-maybe-insert-subdir namapované na klávesu i lze do stávajícího bufferu, v němž se nachází obsah nějakého adresáře, vložit obsah adresáře, na kterém se nachází kurzor. Po adresářích vložených do jednoho bufferu se lze snadno pohybovat pomocí < a >. Dále lze obsahy jednotlivých vložených adresářů skrývat (klávesa $) nebo skrýt všechny najednou pomocí  M-$.

Aby byla práce s tímto módem jakožto se správcem souborů úplná, zbývá doplnit, že klávesou g obnovíme obsah dired bufferu (tedy pokud se jeho obsah změnil, provedené změny se zobrazí); klávesou l se obnoví pouze označené soubory. Mimo to lze přepínat řazení souborů v dired bufferu (standardně jsou řazeny abecedně) na řazení podle data (klávesa  s).

ict ve školství 24

Zajímavý a silný způsob vytváření dired bufferu spočívá v kombinaci použití utility find. Spustíme-li M-x find-name-dired a zadáme-li požadovaný adresář a masku, vytvoří si dired buffer obsahující všechny soubory, jejichž jména vyhovují zadané masce a nacházejí se v některém z podadresářů zadaného adresáře. Ještě silnější je funkce find-grep-dired, která vytvoří dired buffer na základě obsahu (!) souborů. Tato funkce přečte z minibufferu adresář a regulární výraz, který hledá v souborech, a v dired bufferu zobrazí ty soubory, které obsahují vzorek vyhovující zadanému regulárnímu výrazu. Poslední a zcela obecnou možností, jak vytvořit dired buffer, je funkce find-dired, pro kterou lze určit podmínku, kdy má test pro zobrazení souboru uspět. Přesněji řečeno předávaný argument jsou přímo volby pro utilitu find.

Tolik tedy popis dired módu neboli správce souborů v Emacsu. Zajisté existují lepší a přehlednější programy, nicméně je pro uživatele Emacsu dobré o jeho existenci vědět. Navíc některé operace lze skutečně pomocí tohoto módu provádět velmi snadno. Příště si povíme něco o použití Emacsu při tvorbě dokumentů pomocí TeXu a programů odvozených.