LinuxDoc+Emacs+Ispell-HOWTO Avtor: Philippe MARTIN () &nl; Prevajalec: Sébastien Blondeel () &nl; Prevajalca v slovenščino: Roman Maurer (prva 4 poglavja) in Jernej Kovačič () (ostalo) v0.5, 28. april 1998, prevod 10. september 2001 Ta sestavek je namenjen prevajalcem in piscem spisov HOWTO za Linux ali katerikoli drugih dokumentov Dokumentacijskega projekta za Linux. Ponuja jim namige za uporabo orodij, vključno z urejevalnikom besedil Emacs in črkovalnikom Ispell. Predgovor Pravice razširjanja

Copyright Philippe Martin 1998&nl; Ta sestavek lahko razširjate in/ali spreminjate, če upoštevate pogoje GNU-jevske splošne licence različice 2 ali poznejše. Zahvale

Posebej se zahvaljujem Sébastienu Blondeelu, ker me je tako mnogo vpraševal o nastavitvah Emacsa. Njegova bistra vprašanja so mi omogočila, da bolje poznam ta urejevalnik in s tem dokumentom prenesem znanje tudi na vas. Pripombe

Ne oklevajte in mi sporočite vsako pripombo in/ali kritiko tega dokumenta, za katero mislite, da bo prispevala k izboljšavi. &nl; Tudi ne oklevajte z zastavljanjem vprašanj, ki se nanašajo na tukaj obravnavane teme, z veseljem vam bom odgovoril. Različice

Ta sestavek obravnava naslednje različice: SGML-Tools različice 0.99, Emacs različice 19.34, Ispell različice 3.1, Vse knjižnice Emacs, na katere se sklicuje ta sestavek, se razširjajo z gornjo različico Emacs, razen Uvod Jezik SGML

Jezik Standard Generalised Mark-up Language) je jezik za definiranje tipov dokumentov.

Na primer, definira se lahko tip dokumenta za kuharski recept, katerega prvi del določa sestavine, drugi del pripomočke, tretji navodila za peko torte, v zadnjem delu pa je prikazana slika končnega rezultata.

Takšna definicija tipa dokumenta se imenuje DTD (ang. Document Type Definition). DTD ne določa izgleda končnega izdelka, temveč le definira, kaj vse lahko vsebuje.

Če spet uporabimo prejšnji primer: prepričan sem, da ste se po branju moje zamisli kuharskega recepta domislili svojega ali recepta vašega priljubljenega kuharja. Vseeno izgledajo drugačni: moj ima fotografijo, ki jo najdete v levem zgornjem kotu kopališke omarice, seznam sestavin pa najdete med bazenom in žarom. In vaš?

Zahvaljujoč tej standardni definiciji se lahko pišejo sestavki, ne da bi morali predvideti njihov izgled, kot ga bo videl bralec. Definicija tipa LinuxDoc

Ta tip omogoča pisanje, kot ste verjetno uganili, dokumentacije, povezane z Linuxom.

Ti dokumenti so navadno sestavljeni takole: začenjajo se z naslovom, ki mu sledi avtorjevo ime in številka različice ter datum. Potem pride povzetek, ki kratko razlaga vsebino sestavka (da vam ni treba brskati po njej za ugotovitev, da to ni to, kar iščete), potem kazalo, ki prikazuje strukturo sestavka, ter omogoča tistim, ki se jim mudi, da preidejo neposredno na del, ki ga želijo brati.

In nadalje sledi zbirka poglavij, razdelkov, odstavkov. Med temi odstavki lahko vstavite kodo programov, spremenite pisavo, da ponazorite besedo ali stavek, vstavljate sezname, se sklicujete na druge dele sestavka, itd.

Za pisanje takšnega sestavka zadostuje na primernem mestu določiti naslov, avtorja, datum in različico sestavka, nato pisati poglavja in razdelke, povedati, kdaj se vstavi seznam in kaj so njegovi elementi, itd. Paket SGML-Tools

Paket SGML-Tools omogoča izdelavo končnega formata dokumenta iz njegovega opisa. Če želite dokument uvrstiti v vašo osebno knjižnico, boste izbrali izhodni format PostScript, če ga želite deliti s svetom na svetovnem spletu, boste izbrali HTML, in če ne morete pomagati in morate stvar brati pod Windows, ga boste spremenili v RTF, da ga boste lahko uvozili v kakšen urejevalnik besedil. Morda boste želeli uporabljati različne fomrate, ki se bodo prilagajali vašem spremenljivem razpoloženju. Paket SGML-Tools je dostopen po anonimnem FTP-ju z arhiva . Vaš prvi sestavek

Iz tekstovne datoteke

Če želite spremeniti vaš tekstovni dokument v DTD LinuxDoc zaradi spremembe v razne druge formate, je to prava pot: Na samem začetku sestavka dodajte naslednje vrstice:

Tukaj je naslov&etago;title> <author> ime avtorja, njegov e-poštni naslov &etago;author> <date> različica in datum sestavka &etago;date> </verb></tscreen> <item>Če na začetu na kratko opišete vsebino sestavka, obkrožite ta odstavek z oznakamaa <tt><abstract></tt> in <tt>&etago;abstract></tt>. <item>Potem vstavite oznako <tt><toc></tt>, ki v končnem formatu samodejno naredi <em>kazalo</em> (ang. Table Of Contents). <item>Na začetku vsakega novega poglavja nadomestite vrstico s številko in naslovom poglavja z vrstico: <tscreen><verb> <sect>Naslov poglavja </verb></tscreen> in na koncu poglavja dodajte oznako <tt>&etago;sect></tt>.&nl; <p> <bf>Vedite:</bf> Ni vam treba vstavljati številke poglavja, to se naredi samodejno. <item>Na enak način nadaljujte z razdelki. Morali boste odstraniti njihove številke in označiti njihov obseg z oznakama <tt><sect1></tt> in <tt>&etago;sect1></tt>. <item>Na podoben način lahko definirate do 4 nivoje gnezdenja razdelkov (pri <tt><sect4></tt> in <tt>&etago;sect4></tt>). <item>Na začetku vsakega odstavka vstavite oznako <tt><p></tt>. <item>Če želite poudariti določene dele ali fraze, jih vkleščite med oznaki <tt><it></tt> in <tt>&etago;it></tt> (<it>kurzivno</it>), ali <tt><bf></tt> in <tt>&etago;bf></tt> (<bf>polkrepko</bf>), ali med <tt><tt></tt> in <tt>&etago;tt></tt> (<tt>pisalni stroj</tt>). <item>Seznam, kot je naslednji: <tscreen><verb> To je seznam s štirimi vrsticami: - tukaj je prva vrstica - potem druga - še ena - dovolj. </verb></tscreen> vstavite z naslednjo kodo: <tscreen><verb> To je seznam s štirimi vrsticami: <itemize> <item>tukaj je prva vrstica <item>potem druga <item>še ena <item>dovolj. &etago;itemize> </verb></tscreen> <item>Ko celoten blok predstavlja del programa ali kaj drugega, kar mora ohraniti svoj izgled: <tscreen><verb> <verb> 10 REM O, Bog, kaj pa je zdaj to? 20 REM Mislil sem, da tega že zdavnaj ni več! 30 PRINT "Vrnil sem se, "; 40 PRINT "da bi rešil svet." 50 INPUT "Pred kom, vprašujete? ",M$ 60 IF M$="Bill" THEN PRINT "Pametni ste.":GOTO VRAJ 70 ELSE PRINT "Ničesar ne razumete...":GOTO DAJDOLARJE &etago;verb> </verb></tscreen> <item>Prišli ste do točke, ko so vaše formatirne zmogljivosti za SGML DTD LinuxDoc precej spodobne. Če želite izboljšati svoj sestavek, poglejte v uporabniški priročnik paketa <bf>SGML-Tools</bf>, ki podrobneje razlaga tip dokumenta <bf>LinuxDoc</bf>. </enum> </sect1> </sect> <sect>Prilagoditev Emacsa <p> <sect1>Šumniki in črke z akcenti <p> Črke slovenske abecede so podprte v kodnem naboru ISO Latin 2 (ISO 8859-2). Na tem mestu je koristno prebrati <htmlurl name="Slovenian HOWTO" url="http://www.lugos.si/delo/slo/HOWTO-sl/Slovenian-HOWTO.html">, ki razlaga nastavitve za vnos, prikaz in tiskanje naših črk. <p> Emacs prebere svoje nastavitve iz naslednjih datotek: <itemize> <item><tt>/usr/lib/emacs/site-lisp/site-start.el</tt> (skupne nastavitve) <item><tt>~/.emacs</tt> (osebne nastavitve) <item><tt>/usr/lib/emacs/site-lisp/default.el</tt> (skupne nastavitve) </itemize> Kjer se sklicujemo na datoteko <tt>.emacs</tt>, pravzaprav s tem mislimo na katerokoli izmed zgornjih treh datotek. <sect2>Prikaz 8-bitnih znakov <p> Če želite pisati spise <tt>.sgml</tt> v slovenščini ali v kateremkoli drugem evropskem jeziku, boste potrebovali 8-bitne znake. Emacs prilagodite za prikaz 8-bitnih znakov z naslednjo vrstico v vaši datoteki <tt>.emacs</tt>: <tscreen><verb> (standard-display-european t) </verb></tscreen> Za vnos zahodnoevropskih črk pride prav tudi naslednja vrstica, ki pa zaenkrat ni uporabna za slovenščino: <tscreen><verb> (load-library "iso-syntax") </verb></tscreen> Če uporabljate Emacs za pisanje zahodnoevropskih besedil na terminalu, ki ne podpira 8-bitnega prikaza, lahko uporabite knjižnico <tt>iso-ascii</tt> (<tt>(load-library "iso-ascii")</tt>), ki poskrbi, da Emacs prikazuje najboljše približke 8-bitnih črk. <sect2>Vnos 8-bitnih znakov <p> Tipkovnico nastavite za vnos 8-bitnih črk v konzoli ali pod okni X, če Emacs poganjate tam. Tovrstne nastavitve so skupne vsem programom pod konzolo ali okni X in so opisane v spisu <htmlurl name="Slovenian HOWTO" url="http://www.lugos.si/delo/slo/HOWTO-sl/Slovenian-HOWTO.html">. <p> Če vaša tipkovnica v konzoli ali pod oknih X torej podpira vnos 8-bitnih znakov, boste morali le v datoteko <tt>.emacs</tt> dodati naslednje vrstice: <tscreen><verb> ;; Omogočimo vnos znakov s kodo večjo od 127 (set-input-mode (car (current-input-mode)) (nth 1 (current-input-mode)) 0) </verb></tscreen> Če vaš terminal ne podpira 8-bitnega vnosa, ste pri pisanju slovenskih besedil v težavah. Za pisanje zahodnoevropskih besedil si lahko pomagate z dodatnimi paketi: <sect3>Knjižnica <tt>iso-acc</tt> <p> Knjižnica za Emacs <tt>iso-acc</tt> vam bo omogočila vnos 8-bitnih znakov s tipkovnico, ki sicer omogoča le vnos 7-bitnih črk. <p> Za uporabo te knjižnice vstavite naslednje v vašo datoteko <tt>.emacs</tt>: <verb> (load-library "iso-acc") </verb> <p> Ko boste naslednjič pognali Emacs in odprli datoteko, ki bi jo radi uredili, napišite <tt>Meta-x iso-accents-mode</tt>. <p> Črko <bf>é</bf> v francoski besedi <em>café</em> lahko vstavite tako, da pritisnete <bf>'</bf> in potem še <tt>e</tt>. V splošnem lahko vpišete zahodnoevropski znak z akcentom tako, da najprej pritisnete ustrezen akcent, ki mu sledi črka pod njim (velika ali mala). Uporabite lahko naslednje akcente: <list> <item><tt>'</tt> : ostrivec <item><tt>`</tt> : krativec <item><tt>^</tt> : strešica <item><tt>"</tt> : preglas" <item><tt>˜</tt>~: tilda nad črko, sedij (kljukica pod ,,c``), in drugi posebni primeri (glejte <tt>iso-acc.el</tt>) <item><tt>/</tt>~: različni skandinavski akcenti, idr. </list> Če potrebujete enega od teh znakov in ne naglašene črke, pritisnite za njim presledek. Na primer, za vnos <it>l'éléphant</it>, napišite <tt>l ' <cparam/spc/ ' e l ' e ...</tt> <p> Vse možne kombinacije boste našli v datoteki <tt>iso-acc.el</tt>. <sect3>Tipka <cparam/Meta/ <p> Nekateri terminali vam omogočajo vnos 8-bitnih znakov s pomočjo tipke <cparam/Meta/ (ali <cparam/Alt/). Na primer, če pritisnete kombinacijo <bf><cparam/Meta/-i</bf> lahko dobite znak <bf>é</bf>. <p> Vendar Emacs potrebuje tipko <cparam/Meta/ za drugačno uporabo. Zato morate pritisniti zaporedje <cparam/Ctrl/-q (ukaz <tt>quoted-insert</tt>) preden pritisnete <cparam/Meta/-i. Ta ukaz vam dovoljuje vnos znakov tudi z vpisom osmiške kode. Pritisnite kombinacijo <cparam/Meta/-q, ki ji sledi osmiška koda znakov, ki bi jih radi vnesli. Slovenske šumnike ,,ČŠŽ`` in hrvaški črki ,,ĆĐ``, pisane po ISO Latin 2, lahko vnesete z naslednjimi kombinacijami: <tscreen><verb> č Ctrl-q 350 Č Ctrl-q 310 š Ctrl-q 271 Š Ctrl-q 251 ž Ctrl-q 276 Ž Ctrl-q 256 ć Ctrl-q 346 Ć Ctrl-q 306 đ Ctrl-q 360 Đ Ctrl-q 320 </verb></tscreen> <sect2>Prikaz 8-bitnih znakov v SGML DTD LinuxDoc <p> V SGML lahko vnašate naglašene znake z makroukazi, vendar žal ne tudi srednjeevropskih. Na primer, simbol za tipko <bf/é/ je <bf/&eacute;/. V splošnem, aplikacije, ki morajo brati SGML znajo brati 8-bitne znake in ni potrebno uporabljati teh makroukazov. Vendar nekateri morda ne bodo mogli brati 8-bitnih znakov. Če vemo, da obstaja preprosta rešitev (spet samo za zahodne narode, op. prev.), bi bilo škoda pustiti, da se takšne aplikacije sesujejo. <p> Knjižnica <tt>iso-sgml</tt> vam omogoča vnos naglašenih znakov v Emacsu, kot vedno, a ob shranjevanju vaše datoteke na disk, bo samodejno spremenila 8-bitne znake v njihove ekvivalente v SGML. Vendar, žal, slovenske povsem napačno, saj jih v ISO Latin 1 ni. <p> No, zahvaljujoč tej knjižnici je lahko vnašati in brati spise z zahodnimi znaki, pisanimi po ISO Latin 1 (ISO 8859-1) v Emacsu, in prepričani ste lahko, da bo aplikacija, ki sicer ne sprejme 8-bitnih sestavkov, po takem postopku vašega sprejela. <p> Za uporabo te knjižnice morate dodati naslednje vrstice v vašo datoteko <tt>.emacs</tt>: <tscreen><verb> (setq sgml-mode-hook '(lambda () "Privzete nastavitve načina SGML." (load-library "iso-sgml"))) </verb></tscreen> <sect1>Način SGML <p> Po nalaganju datoteke s podaljškom <bf>.sgml</bf>, Emacs samodejno vstopi v <bf>način sgml</bf> (ang. sgml mode). Če ne, mu lahko to naročite ročno z ukazom <tt>Meta-x sgml-mode</tt>, ali samodejno z dodatkom naslednjih vrstic v vašo datoteko <tt>.emacs</tt>: <tscreen><verb> (setq auto-mode-alist (append '(("\.sgml$" . sgml-mode)) auto-mode-alist)) </verb></tscreen> Ta način vam bo, na primer, omogočil izbiro tega, kako boste vnašali 8-bitne znake. Z ukazom <tt>Meta-x sgml-name-8bit-mode</tt> (ali z menujsko postavko <it>SGML/Toggle 8-bit insertion</it>), lahko izberete vnos 8-bitnih znakov kot takih, ali v obliki SGML, se pravi, v obliki <bf>&...;</bf>. Emacs vam bo tudi dovoljeval skriti ali prikazati oznake SGML, z ukazom <tt>Meta-x sgml-tags-invisible</tt> (ali z menujsko postavko <it>SGML/Toggle Tag Visibility</it>). <sect1>Način PSGML <p> Načinu PSGML zelo pomaga pri urejanju spisov SGML z Emacsom. <p> Dokumentacija za <htmlurl name="psgml-linuxdoc" url="http://www.linux-france.com/article/psgml-linuxdoc"> razlaga, kako namestiti in uporabljati ta način z zvrstjo besedila <it>LinuxDoc</it>. <sect1>Razno <p> <sect2>Način auto-fill <p> Ko v normalnem načinu napišete odstavek in pridete do konca vrstice, morate sami uporabiti tipko <cparam/Return/, da pridete v naslednjo vrstico, sicer se bo vaša vrstica nadaljevala nedoločeno dolgo skozi cel odstavek. Kadar uporabite <cparam/Return/ za pomik v novo vrstico, dobite odstavek z neporavnanimi desnimi robovi. Če dopustite, da so nekatere daljše od razumne širine, jih z nekaterimi urejevalniki ne boste mogli videti. <p> Način <bf>auto-fill</bf> avtomatizira to nehvaležno opravilo: ko greste dlje od določenega stolpca (privzeto 70-tega), vas samodejno postavi v naslednjo vrstico. <p> Takole uporabite ta način in nastavite širino vaših vrstic na 80: <tscreen><verb> (setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (auto-fill-mode) (setq fill-column 80))) </verb></tscreen> <sect>Ispell <p> Če želite pravopisno preveriti vaš spis v Emacsu, lahko uporabite paket <bf>Ispell</bf> in njegov način za Emacs. <sect1>Izbira privzetega besednjaka <p> Emacs lahko nastavite tako, da po nalaganju datoteke avtomatsko določi, kateri besednjak naj uporabi (uporabljate jih namreč lahko več). Prvi, zagotovo najpomembnejši, je glavni besednjak, ki se razširja skupaj z Ispellom. Izbirate lahko med več jeziki. Drugi besednjak je vaš osebni, kamor Ispell vstavlja besede, ki jih ni našel v prvem besednjaku, vendar ste mu naročili, naj si jih zapomni. Če želite kot privzetega uporabljati slovenski besednjak (dobite ga lahko na naslovu <htmlurl url="ftp://sizif.mf.uni-lj.si/pub/i18n/ispell/ispell-sl-0.1-1.src.rpm" name="ftp://sizif.uni-lj.si/pub/i18n/ispell/ispell-sl-0.1-1.src.rpm">) in če želite uporabljati datoteko<tt>.ispell-dico-perso</tt> v vašem domačem imeniku kot osebni besednjak, vnesite naslednje vrstice v vašo datoteko <tt>.emacs</tt>: <verb> (setq sgml-mode-hook '(lambda () "Privzeto za nacin SGML." (setq ispell-personal-dictionary "~/.ispell-dico-perso") (ispell-change-dictionary "slovensko") )) </verb> <sect1>Izbira posebnih besednjakov za določene datoteke <p> Do manjšega problema lahko pride, če ne preverjate črkovanja v dokumentih vedno v istem jeziku. Če prevajate dokumente, je zelo verjetno, da pogosto pomešate jezike (in besednjake). <p> Žal ne poznam nobenega načina v Lispu, niti avtomatskega niti kakšnega z enojnim klikom z miško, za izbiro glavnih in osebnih besednjakov, povezanih s trenutno uporabljanim jezikom. (Če veste kaj več, mi prosim povejte!) <p> Vendarle pa je mogoče na koncu datoteke označiti, katere besednjake želite uporabljati ob preverjanju trenutne (in samo te) datoteke. Zadostuje, da te oznake dodate kot komentarje, tako da jih bo Ispell znal prebrati ob zagonu preverjanja črkovanja: <verb> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> </verb> Če ste prej v datoteki <tt/.emacs/ definirali, da naj bodo privzeti besednjaki slovenski, lahko dodate te vrstice na konec vsake datoteke v angleščini. <sect1>Preverjanje črkovanja v vašem dokumentu <p> Preverjanje črkovanja celotnega dokumenta lahko s kateregakoli mesta v preverjanem dokumentu poženete z ukazom <tt>Meta-x ispell-buffer</tt>. Lahko pa tudi preverite samo del dokumenta: <itemize> <item> Označite začetek področja s tipkama <tt>Ctrl-Spc</tt> (mark-set-command), <item> pojdite na konec področja, ki ga želite preveriti <item> in vtipkajte <tt>Meta-x ispell-region</tt>. </itemize> Emacs zatem požene Ispell. Ko naleti na neznano besedo, vam jo pokaže (ponavadi osvetljeno) in čaka, da pritisnete na ustrezno tipko: <itemize> <item><bf>spc </bf>sprejme besedo, samo tokrat, <item><bf>i </bf>sprejme besedo in jo doda v vaš osebni besednjak, <item><bf>a </bf>sprejme besedo, velja samo za to preverjanje, <item><bf>A </bf>sprejme besedo samo za to datoteko in jo doda v besednjak za preverjano datoteko, <item><bf>r </bf>dovoli vam ročno popravljanje besede <item><bf>R </bf>dovoli vam popravek ki velja za vse primere narobe vtipkane besede, <item><bf>x </bf>ustavi preverjanje in postavi kurzor nazaj, <item><bf>X </bf>ustavi preverjanje in pusti kurzor, kjer je, tako lahko popravite datoteko; s preverjanjem črkovanja lahko nadaljujete pozneje, če vtipkate <tt>Meta-x ispell-continue</tt>, <item><bf>? </bf>ponudi vam sprotno pomoč. </itemize> Če Ispell najde eno ali več besed, ki so podobne neznani, vam jih bo pokazal v majhnem okencu. Pred vsako stoji številka. Samo vtipkajte to številko in narobe vtipkana beseda se bo nadomestila z izbrano. <sect1>Osebni besednjak proti besednjaku za preverjano datoteko <p> Tipka <bf>i</bf> vam omogoča vnos besede v vaš osebni besednjak, <bf>A</bf> pa vam doda besedo v besednjak za preverjano datoteko. <p> Besednjak za preverjano datoteko je zaporedje besed, dodano na konec datoteke v obliki komentarjev. Ispell jih znova prebere vsakič, ko ga poženemo za preverjanje te datoteke. Na ta način lahko sprejmete nekaj besed, ki so sprejemljive samo v tej datoteki, v drugih pa morebiti ne. <p> Kar zadeva mene, mislim, da je bolje, da je osebni besednjak rezerviran za besede, ki niso vsebovane v glavnem besednjaku, vendar pripadajo jeziku (npr. besede z vezaji), in pa še za besede, kot so lastna imena idr. (npr. <it>Linux</it>), če niso podobne resničnim besedam iz glavnega besednjaka. Dodajanje preveč besed (npr. imen) v osebni besednjak je lahko nevarno, saj lahko izgledajo kot povsem običajna beseda v nekem jeziku. <sect1>Preverjanje črkovanja med tipkanjem <p> Ispell zna preverjati črkovanje v vaši datoteki kar med tipkanjem. Da bo to delovalo, morate uporabiti način <bf>ispell-minor-mode</bf>. Poženete ali ustavite ga, če vtipkate <tt>Meta-x ispell-minor-mode</tt>. Ispell bo <em>zapiskal</em> vsakič, ko vtipkate besedo, ki je ne prepozna. <p> Če vas ti <em>piski</em> motijo (ali če vaš sostanovalec že spi), lahko te moteče <em>piske</em> nadomestite z bliskanjem na zaslonu, kar dosežete z ukazom <tt>Meta-x set-variable RET visible-bell RET t RET</tt>. V datoteko <tt>.emacs</tt> lahko dodate naslednjo vrstico in za vedno utišate Emacs: <verb> (setq visible-bell t) </verb> <sect>Umazani triki <sect1>Avtomatsko dodajanje zaglavja... <p> Emacs vam omogoča nastaviti, da se nekatere akcije <em>sprožijo</em> ob določenih dogodkih (npr. odpiranje datoteke, shranjevanje, zagon novega načina itd.). <p> Knjižnica <bf>autoinsert</bf> uporablja naslednjo lastnost: ko v Emacsu odprete novo datoteko, vanjo ta knjižnica doda <em>standardno</em> (glede na tip datoteke) zaglavje. <p> V našem primeru bi lahko to <em>standardno</em> zaglavje določilo tip dokumenta (LinuxDoc), naslov, avtorja in datum. <p> Tukaj bom opisal dva načina za dodajanje takšnega zaglavja. Vrinete lahko datoteko s predlogo, ki vsebuje vse naštete informacije, lahko pa poženete rutino v <bf>elispu</bf>. <sect2>z vrivanjem datoteke <p> Najprej morate povedati Emacsu, naj ob odpiranju datoteke požene <tt>auto-insert</tt>, potem naj prebere knjižnico <bf>autoinsert</bf>, ki določi seznam <tt>auto-insert-alist</tt>, tega pa moramo popraviti. Ta seznam določa zaglavje, ki se bo vrinilo v odvisnosti glede na tip datoteke. Privzeto mora biti datoteka za vrivanje v imeniku <tt>~/insert/</tt>, vendar je mogoče popraviti vrednost spremenljivke <tt>auto-insert-directory</tt>, če želite imeti datoteko kje drugje. <p> V vašo datoteko <tt>.emacs</tt> dodajte naslednje vrstice, da se bo datoteka <tt>~/emacs/sgml-insert.sgml</tt> vrinila vsakič, ko odprete novo datoteko SGML: <verb> (add-hook 'find-file-hooks 'auto-insert) (load-library "autoinsert") (setq auto-insert-directory "~/emacs/") (setq auto-insert-alist (append '((sgml-mode . "sgml-insert.sgml")) auto-insert-alist)) </verb> Zatem si lahko v datoteko <tt>~/emacs/sgml-insert.sgml</tt> napišete ustrezno zaglavje, znova poženete Emacs in odprete neko datoteko <tt>foobar.sgml</tt>. Emacs bi vam moral reči, da potrdite avtomatsko dodajanje zaglavja, in če odgovorite z 'yes', ga doda. <sect2>s funkcijo v elispu <p> To deluje podobno kot prej, le da morate namesto nastavljanja seznama <tt>auto-insert-alist</tt> nastaviti funkcijo, ki naj se izvrši. Prikazali bomo ta postopek, pri čemer bomo predpostavili, da želite naisati to funkcijo v datoteko <tt>~/emacs/sgml-header.el</tt>. (Nobene potrebe ni, da datoteko <tt>.emacs</tt> zasmetite s takšniimi funkcijami, ker se lahko zgodi, da bo predolga): <verb> (add-hook 'find-file-hooks 'auto-insert) (load-library "autoinsert") (add-to-list 'load-path "~/emacs") (load-library "sgml-header") (setq auto-insert-alist (append '(((sgml-mode . "SGML Mode") . insert-sgml-header)) auto-insert-alist)) </verb> V <ref id="insert-sgml-header" name="dodatku"> boste našli primer funkcije <tt>insert-sgml-header</tt>. <appendix> <sect>Funkcija <tt>insert-sgml-header</tt> <label id="insert-sgml-header"> <p> Ta funkcija uporabniku omogoči dodajanje zaglavja za dokument dokumentacijskega projekta za Linux (Linux documentation Project) v datoteko. Izvede se lahko samodejno, ko nekdo odpre novo datoteko, ali pa izrecno na uporabnikovo željo. <p> Ta funkcija v <em>mini-bufferju</em> (spodnja vrstica v Emacsu) vpraša uporabnika za nekaj podatkov, izmed katerih so nekateri obvezni, nekateri pa ne. Najprej se pojavi vprašanje o naslovu dokumenta. Če ne podate ničesar, se funkcija takoj konča, ne da bi se dodalo kakšno zaglavje. Sledijo vprašanja o datumu, avtorju, njegovem elektronskem naslovu in domači strani (zadnja dva podatka sta neobvezna). Sledi zahteva po imenu prevajalca. Če ga ni, samo pritisnite <em>Enter</em>, in nobenih nadaljnjih vprašanj o morebitnem prevajalcu ne bo več. Če pa prevajalec obstaja, boste vprašani še po njegovem elektronskem naslovu in domači strani (oboje je ravno tako neobvezno). Funkcija nato zapiše zahteve na mesto, kjer urejate pravkar odprto novo datoteko (buffer v Emacsovi terminologiji), seveda se dodajo vsi malo prej vtipkani podatki in pa še vse oznake, ki služijo označevanju povzetka (angl. abstract) in prvega poglavja. Končno se kurzor postavi na mesto, kjer je potrebno napisati povzetek. <verb> (defun insert-sgml-header () "Doda zaglavje v dokument LinuxDoc" (interactive) (let (title author email home translator email-translator home-translator date starting-point) (setq title (read-from-minibuffer "Naslov: ")) (if (> (length title) 0) (progn (setq date (read-from-minibuffer "Datum: ") author (read-from-minibuffer "Avtor: ") email (read-from-minibuffer "Avtorjev elektronski naslov: ") home (read-from-minibuffer "Avtorjeva domaca stran: http://") translator (read-from-minibuffer "Prevajalec: ")) (insert "<!doctype linuxdoc system>\n<article>\n<title>") (insert title) (insert "&etago;title>\n<author>\nAuthor: ") (insert author) (insert "&nl;\n") (if (> (length email) 0) (progn (insert "<htmlurl url=\"mailto:") (insert email) (insert "\" name=\"") (insert email) (insert "\">&nl;\n"))) (if (> (length home) 0) (progn (insert "<htmlurl url=\"http://") (insert home) (insert "\" name=\"") (insert home) (insert "\">\n&nl;"))) (if (> (length translator) 0) (progn (setq email-translator (read-from-minibuffer "Prevajalcev el. naslov: ") home-translator (read-from-minibuffer "Prevajalceva domaca stran: http://")) (insert "Translator : ") (insert translator) (insert "&nl;\n") (if (> (length email-translator) 0) (progn (insert "<htmlurl url=\"mailto:") (insert email-translator) (insert "\" name=\"") (insert email-translator) (insert "\">&nl;\n"))) (if (> (length home-translator) 0) (progn (insert "<htmlurl url=\"http://") (insert home-translator) (insert "\" name=\"") (insert home-translator) (insert "\">&nl;\n"))))) (insert "&etago;author>\n<date>\n") (insert date) (insert "\n&etago;date>\n\n<abstract>\n") (setq point-beginning (point)) (insert "\n&etago;abstract>\n<toc>\n\n<sect>\n<p>\n\n\n&etago;sect>\n\n&etago;article>\n") (goto-char point-beginning) )))) </verb> </article> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> <!-- Local IspellDict: english --> <!-- Local IspellPersDict: ~/emacs/.ispell-english --> <!-- LocalWords: bastien HOWTOs rushy HTML Dieresis phant eacute sgml caf --> <!-- LocalWords: tof Christophe autoinsert elisp Blondeel spc XEmacs -->