Přepínáte ve znakovém terminálu často různé adresáře souborového systému? Pak by vám mohla přijít vhod aplikace popsaná v tomto článku. Jak to funguje? V aktuálně navštíveném adresáři lze napsat (v terminálu) příkaz sdf d1
, kde parametr d1
je alfanumerický text reprezentující název záložky. Od toho okamžiku se lze do stejného adresáře vrátit kdykoliv později příkazem cdf d1
. Jednomu adresáři lze přiřadit postupně více záložek. Použité názvy záložek lze recyklovat: při opakovaném uložení stejné záložky se původní záznam v tichosti přepíše. Záložky jsou case-sensitive a ukládají se v textovém formátu CSV (oddělovačem je tabulátor) v domovském adresáři uživatele s názvem .directory-bookmarks.csv, lze je tedy snadno upravit běžným textovým editorem. Typickým důvodem k editaci může být změna adresářové struktury, zmíněný soubor však může být užitečný i při přenosu projektu na jiný počítač.
Původní implementace vznikla před 30 lety (někdy během roku 1993) – jako skript pro unixový C-shell. Po přechodu na Linux jsem skript mírně upravil pro Bash a v takové podobě jsem ho používal až dosud. Letos jsem se rozhodl nástroj přepsat do Javy kvůli plánované práci ve Windows. Nové řešení jsem pak implementoval do jediného souboru (přesněji řečeno do jedné Java třídy) s názvem DirectoryBookmarks.java tak, aby ji bylo možné pouštět v prostředí Java 17 i bez předchozí kompilace. Třída akceptuje původní datový formát, některé funkce byly doplněny. Výše uvedené zkratky (příkazů aplikace) má smysl začít požívat až po její integraci do prostředí znakového terminálu. Připomeňme:
cdf d1/mySubdirectory
cp $(ldf d1)/*.java $(ldf d2)
Poznámka k výkonu: i když přímé použití Java třídy může připomínat interpretování skriptu, na pozadí se provádí vždy kompilace. Na novějších počítačích nastane sotva postřehnutelná prodleva, na starších však může být takové prodlení už rušivé. Pro eliminaci tohoto problému umí třída zkompilovat sama sebe a výsledek sestavit do spustitelného JAR souboru, čímž se doba provedení řádově zkrátí. Start Javy pouze s parametrem modulu jádra nemělo na výsledek měřitelný vliv.
Dále představím popis vybraných příkazů pro znakový terminál. V závislosti na okolnostech může být nezbytné doplnit k souborům cestu. V následujících ukázkách reprezentuje první výraz spustitelný souboru Javy, druhý označuje třídu s implementací a třetí výraz reprezentuje prováděcí příkaz. Příkazy lze uvádět volitelně pomlčkou (jednou i vícemi). Pro každý z uvedených příkazů lze samozřejmě připravit si příkazovou zkratku pomocí skriptu či funkce.
Aplikace byla uvolněná pod licencí Apache License, Version 2.0 a potřebuje pro své spuštění prostředí Java 17 či vyšší. V současně době lze na internetu už najít podobných nástrojů několik, nejvíce tam však postrádám přenositelnost mezi operačními systémy. Tento článek jsem psal v naději, že takové pojetí záložek adresářů bude pro někoho užitečné.
Tělo původního řešení (z roku 1993) bylo uloženo v unixovém skriptu s názvem ldf
, dnes se z něj dochovala už jen hlavička s českým popisem. Patinu screenshotu jsem doplnil v editoru GIMP.
Stránka projektu:
A neni na tohle Java zbytecne pomala? Nebyl by (ba)sh skript rychlejsi?
Jinak ja si oblibene adresare aliasuju v .bash_aliases a tim padem ani nemusim psat ten cdf prefix, proste napisu nazev a jsem v adresari.
$ time cdf bin
real 0m0,040s
user 0m0,021s
sys 0m0,025s
Pravda, spuštění bez předchozí kompilace je mnohem pomalejší:
real 0m0,523s
user 0m1,707s
sys 0m0,108s
> Nebyl by (ba)sh skript rychlejsi?
Java implementace se přenáší lépe na jiné operační systémy.
> .bash_aliases ... nemusim psat ten cdf prefix
Zápis nových záložek mi přijde pracný a pro časté vytváření dočasných záložek špatně použitelný.
to je moc tezkopadny... pouzivam tohle: https://threkk.medium.com/how-to-use-bookmarks-in-bash-zsh-6b8074e40774 ; neni potreba ani nic stahovat, je to jen jednoducha konfigurace, naprosto jednoducha vec
$ alias --help
alias: alias [-p] [name[=value] ... ]
Define or display aliases.
Without arguments, `alias' prints the list of aliases in the reusable
form `alias NAME=VALUE' on standard output.
Otherwise, an alias is defined for each NAME whose VALUE is given.
A trailing space in VALUE causes the next word to be checked for
alias substitution when the alias is expanded.
Options:
-p print all defined aliases in a reusable format
Exit Status:
alias returns true unless a NAME is supplied for which no alias has been
defined.
Postřehy ze světa open-source.
Přečteno 31 138×
Přečteno 20 728×
Přečteno 16 965×
Přečteno 14 476×
Přečteno 14 180×