Poglavlje 17 Emacs Tabela sadržaja 17.1 Pokretanje Emacs-a 17.2 Međuspremnici (Buffers) 17.3 Načini rada (Modes) 17.4 Osnove uređivanja 17.5 Pohrana datoteka vi (i njegovi klonovi) je bez sumnje najrašireniji uređivač teksta na Unix sustavima, Emacs se nalazi na čvrstom drugom mjestu. Umjesto korištenja različitih "modova", kao vi uređivač, on koristi Control i Alt kombinacije tipki za izdavanje naredbi, na prilično isti način kao što se Ctrl i Alt kombinacije koriste u različitim tekst procesorima i mnogim drugim aplikacijama. (No, treba naglasiti da se naredbe rijetko podudaraju; dok mnoge aplikacije koriste Ctrl-C/ X/ V za kopiranje, rezanje i ljepljenje, Emacs koristi drugačije kombinacije, čak i ponešto drugačiji "mehanizam".) Također, za razliku od vi, koji je (odličan) uređivač teksta i ništa više, Emacs je aplikacija sa gotovo beskrajnim mogućnostima. Emacs je (u najvećem djelu) napisan u programskom jeziku Lisp, vrlo moćan jezik koji ima posebnu osobinu da svaki program napisan njime automatski istovremeno predstavlja i Lisp prevodilac (compiler) sam po sebi. Što bi značilo da korisnik može proširivati Emacs, i u biti pisati potpuno nove programe "u Emacs-u". Kao posljedica, Emacs više nije samo uređivač teksta. Dostupno je mnogo dodataka za Emacs (mnogi dolaze sa izvornim kodom) koji pružaju razne dodatne funkcionalnosti. Mnogi imaju veze sa samim uređivanjem teksta, što je prije svega glavni zadatak Emacs-a, ali se ne zaustavlja na tome. Na primjer postoji nekoliko programa za tabelarno računanje, baze podataka, igre, klijenti za elektroničku poštu i usenet (od kojih je prvi Gnus), itd. Vodeće dvije inačice Emacs-a su: GNU Emacs (inačica s kojom dolazi Slackware) i XEmacs. Ovaj posljednji nije inačica za korištenje pod X Window sučeljem. U stvari, Emacs i XEmacs se izvršavaju u terminalu kao i pod X sučeljem. XEmacs je nekada pokrenut kao projekt da se počisti Emacs izvorni kod. Trenutno se obje inačice aktivno razvijaju, i postoji mnogo iterakcije između dva razvojna tima. Za ovo poglavlje nije bitno koristite li Emacs ili XEmacs, razlike među njima su beznačajne za normalna korisnika. 17.1 Pokretanje Emacs-a Emacs se može pokrenuti iz terminala jednostavnim izdavanjem naredbe emacs. Kada izvršavate X, Emacs će se (obično) pokrenuti sa svojim X prozorom, obično sa izbornikom na vrhu gdje možete nači najvažnije funkcije. Prilikom pokretanja Emacs će prvo prikazati pozdravnu poruku, a nakon nekoliko sekundi prebacit će vas u *scratch* međuspremnik (buffer). Pogledajte Odjeljak 17.2. Emacs možete pokrenuti i dajući mu kao argument postojeću datoteku % emacs /etc/resolv.conf U ovom slučaju Emacs će učitati zatraženu datoteku, preskačući pozdravnu poruku. 17.1.1 Naredbene tipke Kao što je ranije spomenuto, Emacs koristi Control i Alt kombinacije za naredbe. Najčešća konvencija je da se pišu kao C-slovo i M-slovo. Dakle C-x znači Control+x, a M-x znači Alt+x. (Slovo M se koristi umjesto A zato što prvobitno ta tipka nije bila Alt već Meta tipka. Meta tipka je nestala sa tipkovnica, pa je u Emacs-u Alt tipka zamjenila njezinu funkciju.) Mnoge Emacs naredbe se sastoje od redosljeda tipki i njihovih kombinacija. Na primjer, C-x C-c (tj. Control-x kojeg prati Control-c) gasi Emacs, C-x C-s pohranjuje trenutnu datoteku. Imajte na umu da C-x C-b nije isto što i C-x b. Prvo znači Control-x kojeg prati Control-b, dok drugo znači Control-x praćen samo sa "b". 17.2 Međuspremnici (Buffers) U Emacs-u koncept "međuspremnika" (buffers) je ključan. Svaka datoteka koju otvorite učitava se u vlastiti međuspremnik. Štoviše, Emacs ima nekoliko posebnih međuspremnika, koji ne sadrže datoteke već se koriste za druge stvari. Takvim međuspremnicima ime obično počinje i završava sa zvjezdicom. Na primjer, međuspremnik koji se prikaže kod pokretanja Emacs-a je tzv. *scratch* međuspremnik. U tom spremniku možete upisivati tekst kao i obično, ali taj tekst ne ostane sačuvan nakon što ugasite Emacs. Postoji još jedan poseban međuspremnik za koji trebate znati, a to je minispremnik (minibuffer). Taj spremnik se sastoji od samo jedne linije, i uvijek je prikazan na ekranu: to je zadnja linija u Emacs prozoru, ispod statusne trake za trenutni spremnik. Minispremnik je mjesto gdje Emacs prikazuje poruke namjenjene korisniku, i također je mjesto gdje se izvršavaju naredbe koje zahtjevaju korisnički unos. Na primjer, kada otvarate datoteku, Emacs će "pitati" da unesete njeno ime u minispremnik. Prebacivanje između spremnika moguće je naredbom C-x b. Naredba će od vas zatražiti ime spremnika (ime spremnika je najčešće ime datoteke koja se uređuje u spremniku), te ponuditi zadani (default) izbor, što je obično spremnik u kojem ste bili prije prebacivanja u (ili stvaranja) trenutni. Pritiskom na tipku Enter prebacit će te na taj zadani spremnik. Ako se želite prebaciti u drugi spremnik, koji nije onaj što Emacs podrazumjevano zadaje, samo upišite njegovo ime. Primjetite da možete koristiti tzv. Tab-dopunjavanje: otipkajte prvih nekoliko slova imena spremnik i pritisnite tipku Tab; Emacs će često sam dopuniti ime spremnika. Tab-dupunjavanje radi svugdje u Emacs-u, tj. tamo gdje to ima smisla. Popis otvorenih spremnika možete zatražiti pritiskom na C-x C-b. Ova naredba će obično podjeliti ekran na dva djela, prikazujući spremnik u kojem ste radili na prvoj polovici, a novi spremnik nazvan *Buffer List* na donjem djelu. Ovaj spremnik sadrži popis svih spremnika, njihove veličine, načine rada te datoteke, ako ih ima, koje posjećuju ti spremnici (kako se to kaže u Emacs-u). Možete se otarasiti ovog podjeljenog ekrana pritiskom na C-x 1. Bilješka Pod X sučeljem, popis međuspremnika je također dostupan u Buffer izborniku alatne trake. 17.3 Načini rada (Modes) Svaki spremnik u Emacs-u ima prateći način rada. Ovi načini rada su vrlo različiti od ideje modova u vi: način rada vam govori u kakvom se spremniku nalazite. Na primjer, postoji text-mode za obične tekst datoteke, ali također postoje načini rada kao što je "c-mode" za uređivanje C programa, sh-mode za uređivanje shell skripti, latex-mode za uređivanje LaTeX datoteka, mail-mode za uređivanje e-pošte i poruka, itd. Način rada pruža posebna prilagođenja i funkcionalnost koji su korisni za vrstu datoteke koju uređujete. Čak je moguće da način rada promjeni tipke i naredbe koje se izdaju preko tipki. Na primjer, u tekst načinu rada, tipka Tab jednostavno preskače na sljedeću oznaku tabulacije, ali u mnogim načinima rada za programske jezike, tipka Tab pomiče trenutnu liniju ovisno o dubini bloka u kojem se nalazi ta linija. Gore spomenuti načini rada su tzv. glavni (major) modovi. Svaki spremnik ima točno jedan glavni način rada. Dodatno, spremnik može imati jedan ili više nižih (minor) načina rada. Niži način rada daje dodatne mogućnosti koje mogu biti od koristi za određene zadatke uređivanja. Na primjer, ako pritisnete INSERT tipku, pozvat će te overwrite-mode (prepisivanje preko postojećih slova, umjesto dodavanja). Također postoji i auto-fill-mode, koji je koristan u kombinaciji sa text ili latex načinima rada: svaka linija koju otipkate bude prelomljena kada linija dosegne određeni broj slova. Bez tog načina rada, morate pritiskati M-q da bi prelomili svaki pasus. (Što se također može iskoristiti kod ponovnog formatiranja pasusa, ako ste dodavali neki tekst u njemu i on više nije lijepo prelomljen.) 17.3.1 Otvaranje datoteka Da biste učitali datoteku u Emacs, pritisnite C-x C-f Emacs će od vas zatražiti ime datoteke, pri čemu će unaprijed popuniti neku zadanu putanju (što je obično ~/). Nakon što upišete ime datoteke (možete koristiti Tab-dopunjavanje) i pritisnete ENTER, Emacs će učitati datoteku u novi međuspremnik i prikazati taj spremnik na ekranu. Bilješka Emacs će automatski stvoriti novi međuspremnik, neće učitati datoteku u onaj u kojem trenutno radite. Kako bi stvorili novu datoteku unutar Emacs-a, ne možete jednostavno početi tipkati. Prvo morate stvoriti međuspremnik za datoteku, i smisliti ime datoteke. Ovo možete izvršiti pritiskom na C-x C-f i upisivanjem ime datoteke, isto kao što bi uradili za otvaranje postojeće datoteke. Emacs će primjetiti da datoteka koju ste upisali ne postoji, stvorit će novi međuspremnik i prijaviti sa "(New file)" u minispremniku. Kada pritisnete C-x C-f i unesete ime direktorija umjesto ime datoteke, Emacs će stvoriti novi spremnik u kojem će biti popis svih datoteka u tom direktoriju. Možete pomaknuti pokazivač (cursor) do željene datoteke i stisnuti Enter, i Emacs će je učitati. (U biti postoji puno više "akcija" koje možete primjeniti ovdje, kao što je brisanje, promjena imena i pomicanje datoteka, itd. Emacs je trenutno u "dired" načinu rada (dired-mode), što je zapravo jednostavan upravljač datotekama.) Kada pritisnete C-x C-f, ali se predomislite, pritiskom na C-g možete poništiti naredbu. C-g se koristi gotovo svugdje kada želite poništiti naredbu ili akciju koju ste započeli ali ne želite dovršiti. 17.4 Osnove uređivanja Kada ste učitali datoteku, naravno možete se kretati unutar datoteke sa pokazivačem. Tipke za pomicanje pokazivača te PgUp i PgDn rade ono što se od njih očekuje. Home i End "skaču" na početak i kraj linije. (U starijim inačicama, ove tipke bi preskočile na početak i kraj spremnika.) Međutim, postoje i Control i Meta (Alt) kombinacije tipki koje pomiču pokazivač. Zbog toga jer ne morate pomicati ruke na drugi kraj tipkovnice radi njih, jednom kad se naviknete na njih radit će te puno brže. Njavažnije od tih naredbi popisane su u Tabeli 17-1. Tabela 17-1. Osnovne Emacs naredbe za uređivanje Naredba Ishod C-b pomakni pokazivač jedno slovo u nazad C-f pomakni pokazivač jedno slovo u naprijed C-n pomakni pokazivač jednu liniju dolje C-p pomakni pokazivač jednu liniju gore C-a pomakni pokazivač na početak linije C-e pomakni pokazivač na kraj linije M-b pomakni pokazivač jednu riječ u nazad M-f pomakni pokazivač jednu riječ u naprijed M-} pomakni pokazivač jedan pasus naprijed M-{ pomakni pokazivač jedan pasus nazad M-a pomakni pokazivač jednu rečenicu u nazad M-e pomakni pokazivač jednu rečenicu u naprijed C-d obriši slovo ispod pokazivača M-d obriši do kraja trenutne riječi C-v pomakni pokazivač za jedan ekran dolje (tj., PgDn) M-v pomakni pokazivač za jedan ekran gore (tj., PgUp) M-< pomakni pokazivač na početak međuspremnika M-> pomakni pokazivač na kraj međuspremnika C-_ poništi posljednju promjenu (može se ponoviti); primjetite da u stvari morate pritisnuti Shift+Control+hyphen za ovo. C-k obriši do kraja linije C-s traži prema naprijed C-r traži u nazad Primjetite da su mnoge Meta naredbe paralelne sa Control naredbama, osim što one rade na većim cjelinama: dok C-f pomiče pokazivač za jedno mjesto unaprijed, M-f pomilče za cijelu riječ, itd. Također zabilježite da M-< i M-> od vas očekuju da pritisnete Shift+Alt+zarez i Shit+Alt+točka, jer < i > znakovi se dobivaju pritiskom na Shift+zarez i Shift+točka. (Osim ako ne koristite drugačiji raspored tipkovnice od standardnog US rasporeda.) Primjetite da C-k briše sav tekst od pokazivača do kraja linije, ali ne briše samu liniju (tj. ne briše posljednji znak u liniji, što je znak za novu liniju). Naredba briše liniju samo ako nema teksta poslije pokazivača, drugim riječima da bi obrisali liniju morate postaviti pokazivač na početak linije te pritisnuti C-k dva puta: jednom da obrišete tekst, a jednom da obrišete samu liniju. 17.5 Pohrana datoteka Da bi pohranili datoteku, pritisnete C-x C-s Emacs od vas neće zatražiti ime datoeke, spremnik će biti sačuvan u datoteku iz koje je i učitan. Ako želite pohraniti vaš tekst u neku drugu datoteku pritisnite C-x C-w Kada pohranite datoteku po prvi puta u ovoj sesiji, Emacs će obično pohraniti prijašnju verziju u rezervnu kopiju datoteke, koja će imati isto ime kao i sama datoteka no zadnji znak biti će tilda (valovita linija): dakle ako ste uređivali datoteku "automobili.txt", Emacs će stvoriti rezervnu kopiju "automobili.txt~". Rezervna kopija je kopija datoteke koju ste učitali. Prilikom rada, Emacs će redovno automatski pohranjivati kopiju onoga što radite (auto-save), u datoteku čije ime će biti omeđeno tarabama: #automobili.txt". Ova sigurnosna kopija biti će obrisana kada pohranite datoteku pritiskom na C-x C-s. Kada završite sa uređivanjem datoteke, možete ugasiti međuspremnik pritiskom na C-x k Emacs će zatražiti ime spremnika kojeg želite ugasiti, sa trenutnim međuspremnikom kao ponuđenim podrazumjevanim izborom, što možete potvrditi pritiskom na ENTER. Ako još niste pohranili datoteku, Emacs će zatražiti potvrdu ako zaista želite ugasiti međuspremnik. 17.5.1 Gašenje Emacs-a Kada ste u potpunosti završili sa radom, možete pritisnuti C-x C-c Ova naredba gasi Emacs. Ako imate datoteka koje još nisu pohranjene, Emacs će vas o tome obavijestiti i ponuditi mogućnost da ih pohranite jednu po jednu. Ako odgovorite negativno na makar jedno od pitanja, Emacs će zatražiti još jednu, posljednju potvrdu i onda se ugasiti.