2. toukokuu 2010, 10:19

From Bash to Z Shell

Laitoin suosituksesta sellaista kirjaa tulemaan. Mukava reilu 400-sivuinen eepos nimensämukaisesti kahdesta eniten käytetystä shellistä. Ajattelin hallita systeemiä kokonaisuudessaan, joten nyt on aika hakea taustatykistöä näinkin radikaalista ympäristöstä.

Kyselin ZSH:n postilistoilta tuosta kontekstitietoisesta tiedostojen täydentämisestä, ja sainkin jo alustavia tuloksia joihinkin ongelmiin. En kuitenkaan kaikkeen. Samalla eräs osaava kirjailija suositteli mainittua kirjaa From Bash to Z Shell: Conquering the Command Line ja kun se irtoaa posteineen 17 eurolla, mikä ettei tilata? Minua on edelleen kalvanut hieman tuo bashista siirtyminen pois, mutta joskushan se pitää kai tehdä? Ehh.. jos ajatellaan kaikki korkean tason shellit (joihin voidaan ainakin nämä kaksi lukea) sellaisiksi, että ne voidaan kustomoida prikulleen siten, kuten itse haluaa, eihän tässä ole sitten muuta kuin valita mieleinen. Pikkuseikat lisäksi vaikuttavat: bashin käyttämä readline ei siis tue sellaista ajatusta, että syötteen modaalisuus ilmoitetaan shellille itselleen väliaikaisesti. Sellainen toimii kuitenkin zsh:ssa, ja ehkä se yksityiskohta voi riittää toistaiseksi valintaani.

Ennen kirjaakin ajattelin saada tiedostotäydentelyyn lisämukavaa. Zsh:n heikko puoli on aika kovantasoinen epäselvyys (josta ei kyllä bashikaan puhtain paperein pääse läpi) näihin asioihin liittyen. Se ei ole myöskään niin suosittu, joten erilaisten dokumenttien määrä verkossa on astetta heikompi. Siihenpä epäkohtaan tuo kirjanen luultavasti auttaa oikein mojovasti. Annetaan kuitenkin eräs maistiainen, joka luultavasti onnistuisi myös bashissa, mutten koskaan tohtinut vaivautua:

zstyle ':completion:*:(xpdf|epdfview|okular):*' file-patterns \
  '*.(pdf|ps):readable-files *(-/):directories' '*:all-files'

Älkää kysykö kaikista yksityiskohdista: sen vain tiedän, että nyt se toimii PDF-lukijain osalta siten, kuten kuuluukin. Eli kolmea käyttämääni lukijaa varten helpottamaan on asetettu ehto, että täydennetään niille vain kahdenlaisia olioita: joko tiedostoja, joiden pääte on pdf tai ps, tai hakemistoja. Tuo koodi ei mahdollista minkään muun täydentämistä, joten se on hyvin epätäydellinen. Aina tulisi tarjota lopuksi mahdollisuus täydentää niitä muita tiedostoja, jotka eivät sovikaan muottiin.

Ajatellaan vaikka tapaus mplayer. Sinne voisi samanlaiseen sävyyn asettaa avi-, mkv-, mpeg- ja mov-tiedostot täydennettäväksi, mutta entäs jos joku video onkin vaikka VOB? Tai vaikka listaan asetettaisiin kaikki tunnetut videopäätteet kautta maan, joku video olisi ilman päätettä, esimerkiksi streamin dumppauksen ohessa? Ainut ratkaisu olisi olla käyttämättä sitä täydennystä lainkaan. Eli täydennykseen pitää saada sellainen prioriteettijärjestelmä. Oletetaan nyt vaikka tämä mplayer. Sille voi täydentää mitä hyvänsä, mutta prioriteettina on oltava tunnetut videotiedostopäätteet. Kun ne on ensin koluttu läpi, sitten shellin pitäisi tarjoilla niitä loppuja.

Samanlainen logiikka sitten vimille. Oletetaan tyypillinen LaTeX-hakemisto:

graftesti.aux
graftesti.log
graftesti.pdf
graftesti.tex

Näistä tiedostoista aux ja log ovat varsin hyödyttömiä. PDF:ää taas ei ole mielekästäkään lukea vimillä. Selvästi tex-päätteisten tiedostojen tulisi olla vimin täydennyslistoilla prioriteettina, mutta koska vim on hyvin yleispätevä editori, mitään ei saisi sulkea pois. Ei ainuttakaan tiedostoa tahi päätettä. Edellä mainittu skeema ei siis ole täydellinen. Zsh:n ohjeita lukemalla ei pääse viisastumaan, sillä se toimii korkeintaan referenssinä opitulle. Tulen palaamaan aiheeseen kirjasen myötä. Siinä vaiheessa oltaneen jo kesälomilla.

Tageja: ,

---
---

---

Aiheen vierestä