otlcat: concatenate and print outline files

Aquest cap de setmana passat vaig escriure un petit script en perl que funciona de manera semblant al famós cat, però que està especialment orientat a outlines. Ho he fet més que res perquè últimament estic trastejant una mica amb The Vim Outliner, com ja vaig comentar fa alguna setmana. Entre altres coses he organitzat una mica alguns How To que tenia repartits entre l’ordinador, aquest blog i internet, i que intentaré penjar quan estiguin una mica més estructurats, i algunes receptes senzilles de cuina, entre les que destaca la paella de carn (dissabte passat va ser un èxit!), que potser també penjaré. Ja veurem.

L’script en qüestió, otlcat, serveix per a imprimir els continguts d’un arxiu a la sortida estàndard (stdout). Si es criden diversos arxius, el seu contingut es concatena. Fins aquí res diferent del cat. La gràcia és que si l’arxiu de text en qüestió és un outline amb el format que utilitza The Vim Outliner (tabuladors per a especificar les jerarquies, els títols comencen directament després dels tabuladors i el text està delimitat pel caràcter ‘|‘), otlcat té un cert control sobre l’output i pot imprimir només fins a una certa profunditat, només text o títols, o títols i text amb profunditats diferents. Per exemple,

$ otlcat -Th2 exemple.otl

imprimiria tots els títol de jerarquia 1 i 2, però cap bloc de text, de l’arxiu exemple.otl.

Com sempre, el codi es troba aquí. Si us mireu una mica el codi, podeu canviar fàcilment el delimitador de text ‘|‘ per algun altre caràcter. Crec, per exemple, que hi ha outliners que utilitzen la coma, o el punt i coma. Per a veure com utilitzar exactament el programa n’he escrit una documentació. N’hi ha prou amb escriure

$ otlcat --man

per obrir una pàgina a l’estil de les man. Instal·lar-la i poder-la consultar com qualsevol altre man és ben fàcil. Per exemple, per posar la pàgina man al vostre directori local:

$ pod2man path/to/otlcat > ~/share/man/man1/otlcat.1

Més endavant potser escriuré altres scripts (per exemple, per just el contrari, un otlsplit no estaria malament). Si teniu alguna suggerència serà benvinguda!

Com a exemple d’aplicació, otlcat es pot utilitzar directament des del vim. Per exemple, si ens volem carregar tot el text (però no els títols) d’un conjunt de línies, les podem seleccionar des del mode visual (s’hi entra amb v) i seguidament escriure

:!otlcat -T

(que en realitat quedaria com :'<'>!otlcat -T). Fàcil!