borekb / blog

Viz issues
https://github.com/borekb/blog/issues
11 stars 0 forks source link

Znap – asynchronní Zsh plugin manažer #2

Open borekb opened 3 years ago

borekb commented 3 years ago

Na správu Zsh pluginů jsem "odjakživa" používal Antibody – nevím pořádně proč, nejsem žádný konzolový guru (spíš lamka, abych se přiznal), ale tehdy se profilovali jako rychlejší alternativa k populárnímu Antigenu, tak jsem to vzal a moc neřešil.

Antibody mi sloužilo dobře, .zshrc s ním vypadal nějak takhle:

source <(antibody init)

antibody bundle robbyrussell/oh-my-zsh
antibody bundle sindresorhus/pure
antibody bundle zsh-users/zsh-completions
antibody bundle agkozak/zsh-z

Vždycky mě trochu štvalo, že start nového shellu trvá zhruba sekundu, což není vina Antibody, ale nějakého mého bordýlku (podezření je na nvs – možná souvisí tohle – a pak na compinit, viz níže), nicméně se mi to nechtělo řešit a bral jsem to jako přežitelnou daň za jinak skvělý Zsh a pluginy v něm (musíte chápat, že jsem dlouhá léta trpěl v cmd.exe a dalších víceméně nepovedených shellech na Windows 🤦‍♂️).

Nedávno bylo ale Antibody označené jako deprecated. V souvislosti s tím jsem zahlédl zmínku o Znapu, který údajně prompt zobrazí za 40 ms, což znělo až moc zajímavě na to, abych to ignoroval.

⚡️Znap funguje podobně jako Antibody (a asi i většina dalších plugin manažerů) a .zshrc s ním vypadá takhle:

source ~/.znap/zsh-snap/znap.zsh

znap prompt sindresorhus/pure
znap source robbyrussell/oh-my-zsh
znap source zsh-users/zsh-completions
znap source agkozak/zsh-z

Velkým rozdílem je znap prompt místo znap source pro můj Pure prompt – zobrazí ho okamžitě a zbytek .zshrc vykonává na pozadí / asynchronně. To nijak fundamentálně neřeší pomalost, ale pocitově to pomáhá moc – až si občas říkám, jestli je vše v pořádku, jak prompt naběhne rychle 😄.

Další praktickou věcí je automatické řešení compinit. compinit je ošidná věc – důležitá pro různé completions, ale laik se snadno ztratí v tom, kdy přesně to zavolat, jestli se to nevolá z něčeho jako Oh My Zsh, případně kdy, jak je to s výkonem (volání compinit dokáže trvat přes sekundu) atd. Znap dělá z compinit prázdnou funkci, aby se běžný Franta uživatel nestřelil do nohy, a pak to ve správný moment zavolá. Tedy když vše funguje.

Přechod byl snadný, včetně různého pročišťování vypadal PR takhle:

Antibody vs. Znap

V praxi je pak potřeba volat znap manuálně v těchto případech:

Celkově Znap 👍.