Ikona místo terminálu

./blog.sh v1.10 — díl 3 z 8

Každý návod k tomuto enginu začíná stejnou větou: otevři Terminál, přejdi do složky svého webu a napiš ./blog.sh. Pro člověka, který v terminálu žije, je to jedna věta. Pro člověka, který v něm nežije, jsou to tři věci, které lze pokazit dřív, než napsal první slovo – kde se Terminál bere, co znamená „přejdi do složky" a proč před tím příkazem stojí tečka s lomítkem.

1.10 dělá z té věty věc, na kterou se dá poklepat.

Co průvodce nabídne

./setup.sh na Macu končí jednou otázkou navíc:

Vytvořit v Aplikacích ikonu, která tenhle blog otevře poklepáním?
Terminál na konci ./setup.sh: otázka na spouštěč zodpovězená y, pak „The launcher is ready: /Applications/Sean.cz.app“ a poznámka o prvním poklepání.
Konec ./setup.sh na sean.cz: otázka a dvě věci, které jsou macOS.

Enter znamená ne – souhlas totiž něco zapíše mimo složku webu, a to si průvodce na sebe nechce vzít. Po souhlasu vznikne v Aplikacích ikona pojmenovaná po webu a s jeho faviconou. Poklepání na ni otevře Terminál ve složce webu a spustí v něm ./blog.sh. Nic víc: spouštěč nemá vlastní okno a neumí nic, co neumí ./blog.sh. Kdo si ho nevytvořil hned, nebo komu se složka webu přestěhovala, spustí ./setup.sh --launcher – složka je do spouštěče zapsaná, takže web, který se přesunul, chce spouštěč vyrobit znovu, a je to tentýž příkaz.

Launchpad v macOS s ikonou Sean.cz mezi ostatními aplikacemi, s faviconou webu.
Sean.cz v Launchpadu vedle aplikací, které někdo nainstaloval.

Z čeho je

Z toho, co na Macu už je. osacompile přeloží pár řádků AppleScriptu na aplikaci, sips a iconutil udělají z favicony webu ikonu v pěti velikostech, každou pro obyčejný i Retina displej, codesign balíček znovu zapečetí, protože zápis dovnitř porušil pečeť, kterou mu dal překladač. Nic se neinstaluje a nic se nestahuje. Spouštěč jde do /Applications, nebo do ~/Applications u účtu, který tam zapisovat nesmí.

Aplikaci stejného jména, kterou blog.sh nevyrobil, nikdy nepřepíše. A nepřepíše ani spouštěč jiného webu, který se jmenuje stejně – dva weby, kterým ještě nikdo nedal jméno, se oba jmenují „blog.sh"; průvodce to řekne a poradí dát jednomu z nich vlastní site.short_name.

Dvě věci, které jsou macOS, ne enginu

První poklepání vyvolá otázku, jestli smí tahle aplikace ovládat Terminál. Ptá se macOS a ptá se jednou; odmítnutí znamená, že ikona nic nedělá, dokud se to nepovolí v Nastavení systému. Co engine ovlivnit umí, je věta pod otázkou. macOS tam od výroby píše anglickou větu o ničem konkrétním; spouštěč do ní vloží jednu větu v jazyce webu:

Spouštěč otevře Terminál ve složce tvého blogu a spustí v něm ./blog.sh. Nic jiného nedělá.

Druhá věc: Terminál nechá okno po skončení ./blog.sh otevřené a napíše, že proces skončil. Jestli se má místo toho zavřít, je nastavení Terminálu (Nastavení → Profily → Shell), ne enginu. Průvodce říká obojí.

Dvě okna

První verze otevírala dvě okna. Terminál, který neběžel, si při startu otevře vlastní okno, a příkaz „spusť skript" k němu přidal druhé: prázdné okno a blog, při každém poklepání, přesně tomu autorovi, pro kterého spouštěč je – tomu, kdo žádný Terminál otevřený nemá. Teď se spouštěč nejdřív zeptá, jestli Terminál běží, a při studeném startu spustí ./blog.sh v okně, které si Terminál sám otevřel. Běžící Terminál dostane okno nové, jako dřív.

Sada testů drží ten skript řádek po řádku, i obě věci, na kterých oprava stojí. Co ověřit neumí, je samotné poklepání: chování Terminálu a dotaz macOS se musí vyzkoušet rukou, obě cesty, se zavřeným i běžícím Terminálem.

Komu to je

Nikomu, kdo tenhle web čte kvůli tomu, jak engine drží zámek nebo jak se verzují překlady. Těm, pro které byla ta první věta návodu tři věci k pokažení. Jinde než na Macu se otázka neklade; na Linuxu zůstává terminál. A spouštěč je první díl něčeho většího: série pro autory, kteří v terminálu nežijí, začíná přesně tam, kde tahle ikona končí – u prvního příspěvku.

Komentáře