Skript na kompilovanie (skoro) hocičoho

Mnohé textové editory ponúkajú možnosť pomocou nejakej klávesovej skratky spustiť make v adresári s editovaným súborom. Je to pomerne pohodlné, ale nie vždy chcem na kompilovanie používať make. Preto som napísal jednoduchý shell skript, ktorý dokáže podľa typu súboru rozhodnúť ako ho skompiluje.

Tu je samotný skript build.sh:

#!/bin/bash

function run() {
    echo $@
    $@
}

function build_tex() {
    LATEX_ARGS=-halt-on-error
    FILENAME=$1

    MASTER=`grep -oP '(?<=%% master:) [-_\.\w]*' $FILENAME`
    if [ -n "$MASTER" ]
        then FILENAME=$MASTER
    fi

    if grep -Fq $'\usepackage{slovak}\n\usepackage{czech}' $FILENAME
        then run cslatex $LATEX_ARGS $FILENAME
        else run latex $LATEX_ARGS $FILENAME
    fi
}

FILENAME=$1
if [ -f Makefile -o -f makefile ]
    then run make
elif [ -f SConstruct ]
    then run scons -Q
else
    EXT=${FILENAME##*.}
    case "$EXT" in
    "tex")
        build_tex $FILENAME
        ;;
    "java")
        run javac $FILENAME
        ;;
    "c")
        run gcc -Wall -o ${FILENAME%.c} $FILENAME
        ;;
    *)
        echo "I don't know how to build your file"
        ;;
    esac
fi

Zatiaľ nepodporuje veľa typov súborov. Pokiaľ je v aktuálnom adresári súbor Makefile, tak spusti make, pokiaľ je tam súbor SConstruct – spusti scons. Ak žiaden z týchto súborov nenájde, rozhoduje sa podľa názvu súboru, ktorý dostane ako argument. Vie skompilovať program v C a v Jave, alebo spracovať dokument v LaTeXe. Pridanie podpory pre ďalšie typy súborov je veľmi jednoduché, takže každý si to môže prispôsobiť podľa vlastných potrieb.

Ešte sa zastavím pri spracovávaní dokumentov v LaTeXe. Skript vie rozpoznať či sa má použiť csLaTeX alebo obyčajný LaTeX. Tiež podporuje dokumenty rozdelené do viacerých súborov: stačí do súborov dať komentár v tváre

%% master: názov_hlavného_súboru

a spracovávať sa bude hlavný súbor namiesto toho, ktorý skript dostal ako argument.

Dúfam, že tento skrípt bude pre niekoho užitočný.

Jednoduchá inštalácia vlastného rozloženia klávesnice

Napísal som jednoduchý shell skript, ktorý inštaluje nové rozloženie klávesnice do X Window systému. Ako takéto rozloženie vytvoriť si môžete prečítať v mojom staršom článku.

Ten skript vyzerá tak:

#!/bin/sh

XKBDIR=/usr/share/X11/xkb

DIR=$PWD
cp $1 $XKBDIR/symbols/
cd $XKBDIR/rules/
sed -e "/<layoutList>/r $DIR/$1.xml" -i.bak xorg.xml
sed -e "/! layout/r $DIR/$1.lst" -i.bak xorg.lst

K tomu, aby správne fungoval, umiestnite do jedného adresára tieto súbory:

  1. definíciu rozloženia klávesnice (napríklad sk_sergejx)
  2. súbor s opisom rozloženia, ktorý sa má „vsunúť“ do xorg.xml. Tento súbor musí mať rovnaký názov ako súbor č. 1, ale s príponou .xml (napríklad sk_sergejx.xml)
  3. súbor s opisom rozloženia, ktorý sa má „vsunúť“ do xorg.lst. Tak isto musí mať rovnaký názov ako súbor č. 1, ale s príponou .lst (napríklad sk_sergejx.lst)

Potom treba skript spustiť v adresári s týmito súbormi a ako parameter mu dať názov súboru s rozložením. Napríklad takto:

./install.sh sk_sergejx

Samozrejme musíte ho spúšťať ako root, aby mohol zapisovať do príslušných konfiguračných súborov. Skript vytvára zálohu súborov xorg.xml a xorg.lst s príponou .bak pre prípad, že by ste ich chceli vrátiť do pôvodného stavu. Skript bol testovaný s X.org verzie 7.0, ale po menšej úprave by mal fungovať aj so staršími verziami.

Pripravil som aj balík s mojim rozložením klávesnice, ktorý obsahuje tento inštalačný skript.

Ďalšie tipy pre Mplayer

Pred časom som spísal pár tipov pre používanie multimediálneho prehrávača Mplayer. A teraz je čas na pokračovanie.

Umiestnenie titulok

O probléme s umiestnením titulok som písal už v minulom článku, ale od vtedy sa niektoré veci zmenili. Pripomeniem, že problém je v tom, že pri širokouhlých filmoch Mplayer umiestňuje titulky na obraz a nie do čierneho pásu pod nim. Nedávno ale vyšla verzia 1.0pre8, ktorá prináša zlepšenú verziu video filtra expand. Teraz, ak používate rozlíšenie obrazovky s pomerom strán napríklad 4:3, použite takýto parameter pri spúšťaní Mplayera (je tam päť dvojbodiek):

-vf expand=:::::4/3

Môžete túto voľbu vložiť aj do konfiguračného súboru v takomto tváre:

vf=expand=:::::4/3

Podrobný popis tohto filtra nájdete v manuálovej stránke.

Zakázanie šetriča obrazovky

Na zakázanie šetriča obrazovky má Mplayer parameter -stop-xscreensaver. Problém je, že zatiaľ nedokáže deaktivovať nový gnome-screensaver, ktorý sa objavil v Gnome 2.14. Kým to vývojári Mplayera (alebo Gnome) nevyriešia môžete používať napríklad takýto skript, ktorý vypne gnome-screensaver pred spustením Mplayera a potom ho znovu zapne.

#!/bin/bash
gnome-screensaver-command --exit
/usr/bin/mplayer "$@"
gnome-screensaver

Tento skript mam uložený v súbore ~/bin/mplayer, takže sa spustí vždy, keď zadám príkaz mplayer.

Ďalšie tipy

Ak pozeráte film, ktorý sa skladá z viacerých súborov, ale všetky majú rovnakú veľkosť obrazu, tak môžete použiť parameter -fixed-vo. Ten zabezpečí, že všetky súbory sa budu prehrávať v tom istom okne, takže prechod od jedného súboru k druhému si väčšinou ani nevšimnete.

Pomocou Mplayera môžete tiež uložiť video stream z internetu na disk. Stačí použiť parameter -dumpstream. Ak chcete uložiť len obraz alebo len zvuk, použite namiesto toho -dumpvideo resp. -dumpaudio. Stream sa štandardne uloží do súboru ./stream.dump. Ak chcete názov výstupného súboru zmeniť, použite parameter -dumpfile názov_súboru.

Ak vám nevyhovuje, že pri zmene hlasitosti Mplayer používa kanál „PCM“, môžete to zmeniť pomocou parametra -mixer-channel názov_kanálu. Ja používam kanál „Master“. Ak používate ALSA audio výstup, zoznam kanálov si môžete pozrieť napr. v programe alsamixer.

RAMulator

Po prvom cvičení z predmetu Programovacie techniky som sa rozhodol, že musím napísať jednoduchý emulátor RAM stroja. Správil som to ešte v ten deň a výsledok teraz dávam tu. Na jeho beh potrebujete Python. Je to konzolový program a pri jeho spustení je potrebné mu zadať názov súboru s RAM programom ako parameter. Program ešte pozná prepínač -s, ktorý zapne tzv. stepping mode, v ktorom sa pred vykonaním každej inštrukcie RAM programu bude čakať na stlačenie Enter a po jej vykonaní vypíše stav registrov.

Program som skoro vôbec netestoval, takže v ňom je asi množstvo chýb a možno vôbec nefunguje. Takže nehovorte, že som vás nevaroval ;-)

Takže sťahujte ramulator.py. Program je samozrejme slobodný softvér pod licenciou GNU GPL

Poznámka: Pre tých, ktorí nevedia čo je RAM stroj je tu článok na Wikipédii vďaka ktorému som sa dozvedel že jeden jeho emulátor už existuje (a možno je lepší ako môj)

Aktualizácia (29. apríla 2006): Pridal som inštrukciu JNZ a spravil nejaké ďalšie menšie úpravy.

Veľkonočné vajíčka

Veľkonočnými vajíčkami (easter eggs) sa zvyknú nazývať skryte funkcie v programoch, ktoré sú určené zväčša len pre pobavenie. V slobodnom softvére sa veľkonočné vajíčka nenachádzajú veľmi často, ale predsa tu nejaké sú. Takže opíšem tie, o ktorých viem.

Kniha Mozilly

Skúste do adresového riadku v prehliadači založenom na Mozille (Firefox, Epiphany a iné) zadať adresu about:mozilla. Viac si o tom môžete prečítať v článku na AbcLinuxu.cz.

APT a posvätná krava

Ďalšie známe veľkonočné vajíčko sa nachádza v správcovi balíkov distribúcie Debian. Ak máte nainštalované APT, skúste zadať príkaz

apt-get moo

Všimnite si tiež posledný riadok vypísaný pri príkaze

apt-get help

ktorý tvrdí, že „Toto APT má schopnosti posvätnej kravy.“

Ďalšim populárnym programom na správu balíkov v Debiane je Aptitude. Tento program tvrdí (ak zadáte aptitude help), že nemá schopnosti svätej kravy. A dokonca na príkaz

aptitude moo

reaguje hlásením: „V tomto programe nie sú žiadne veľkonočné vajíčka.“ Ale nenechajte sa tak rýchlo odradiť, skúste si vyžiadať podrobnosti parametrom -v, teda

aptitude -v moo

A nevzdávajte sa rýchlo, môžete pridávať aj ďalšie véčka:

aptitude -vv moo

Zdroj: The Easter Egg Archive

Gnome, alebo osloboďte rybu

O tomto veľkonočnom vajíčku som sa dozvedel z weblogu Tiaga Cogumbreiro. Ak používate Gnome, tak stačí stlačiť Alt+F2 a do dialógu na spúšťanie programov, ktorý sa objaví, napíať „free the fish“ (bez úvodzoviek samozrejme). Ďalšie veľkonočné vajíčko spustíte ak do dialógu na spustenie programov napíšete „gegls from outer space“.

Ak poznáte nejaké ďalšie veľkonočné vajíčka v slobodnom softvére, tak o nich napíšte v komentároch.