Emacs a renesans literatury polskiej

Co to jest Emacs?

EMACS is a display editor which is implemented in an interpreted high level language. This allows users to extend the editor by replacing parts of it, to experiment with alternative command languages, and to share extensions which are usually useful. The ease of extension has contributed to the growth of a large set of useful features. Richard Stallman, MIT AI Memo 519a, 1981.

Nowoczesne wersje Emacsa maj▒ wiele takich rozszerze±, co powoduje, ┐e wielu u┐ytkownik≤w pisze teksty, programuje, czyta pocztΩ, Newsy, WWW i w og≤le ``┐yje'' w Emacsie. Emacs sta│ siΩ dla niekt≤rych religi▒.

JΩzyk, w kt≤rym pisze siΩ rozszerzenia do GNU Emacsa nazywa siΩ Emacs Lisp. Jest to pochodna MacLisp, dialektu Lisp u┐ywanego w MIT pod koniec lat 70-tych. Nie odzwierciedla on stanu zaawansowania nowoczesnych Lisp≤w.


Emacs≤w jak mr≤wk≤w

Wersji Emacsa jest wiele. Oryginalny Emacs zosta│ napisany w latach 70-tych przez Stallmana w dialekcie TECO. Potem powsta│y Emacsy dla Lisp Machines (EINE -- EINE Is Not Emacs, ZWEI -- ZWEI Was Eine Initially) i Multics Emacs. S▒ te┐ Edwin (napisany w MIT Scheme), Hemlock (w CMU Common Lisp), i wiele innych.

Obecnie u┐ywa siΩ g│≤wnie GNU Emacsa, kt≤rego podstawy napisa│ ten┐e Stallman. Dalszy ci▒g tego tekstu dotyczy wy│▒cznie odmian GNU Emacsa.

Mo┐na jeszcze ci▒gle dostaµ wersje GNU Emacs 18, stabilne, szybkie i stosunkowo niewielkie (ostatnia mia│a numer 18.59). Standardowo Emacs 18 pozwala tylko na pisanie w ASCII (znaki siedmiobitowe), ale istniej▒ nieoficjalne odmiany o╢miobitowe kt≤re powinny prawid│owo dzia│aµ w ISO-8859-2.

Po wersji 18.59 GNU Emacs siΩ rozdzieli│. G│≤wn▒ ga│Ωzi▒ jest (FSF) Emacs 19, kt≤ry jest szybki i stabilny. Drug▒ wersj▒ jest XEmacs (oryginalnie Lucid Emacs), kt≤ry jest lepiej zintegorowany z systemem okienkowym.

Poza tym, ka┐de z odga│Ωzie± istnieje w dw≤ch wersjach: zwyk│ej, i wielojΩzycznej (Multilingual Emacs, alias MULE). W wersji zwyk│ej, Emacs pracuje ze znakami jednobajtowymi; MULE ma znaki o zmiennej d│ugo╢ci, tak ┐e tekst mo┐e zawieraµ mieszankΩ jΩzyk≤w europejskich i innych. MULE jest darem Boga dla ogonkowc≤w (m≤wi│em, ┐e to religia).

Kombinacje s▒ nastΩpuj▒ce:

(FSF) Emacs dzia│a pod Unixami (tryb tekstowy, pod X lub pod NeXTStep), VMS, MS-DOS, MS-Windows (wersja z prawdziwymi okienkami!). XEmacs chyba tylko pod Unixami (pod X oraz w trybie tekstowym od wersji 19.13), choµ istnieje podobno wersja 19.6 dla Windows.


Gdzie dostaµ Emacsa

Emacs 18.59 oraz (FSF) 19 (╝r≤d│a) mo┐na dostaµ z ka┐dego mirroru GNU, n.p. w Polsce z sunsite.icm.edu.pl. WersjΩ 18.59 z o╢miobitowymi znakami widzia│em kiedy╢ na ftp.ibp.fr, ale chyba ju┐ jej tam nie ma.

Emacs 19 dla zwyk│ego DOS-a (wymaga procesora i386 lub p≤╝niejszego) mo┐na dostaµ z ftp.simtel.net. Ta wersja powinna te┐ dzia│aµ pod Windows.

Emacs 19 dla OS/2 mo┐na dostaµ z ftp-os2.cdrom.com.

Emacs 19 dla Windows NT i 95 jest opisany tutaj. Mo┐na go dostaµ z ftp.cs.washington.edu, lub z ftp.sunet.se.

Emacs 18.59 dla Macintosha mo┐na dostaµ z ftp.cs.cornell.edu.

XEmacs (╝r≤d│a i pliki binarne) mo┐na dostaµ z ftp.xemacs.org, archiwum mirrorowanego miΩdzy innymi na sunsite.icm.edu.pl. Jest tam te┐ XEmacs-20/Mule.

Mule 2 (╝r≤d│a) mo┐na dostaµ z etlport.etl.go.jp.

Mule 2 dla Windows NT i 95 mo┐na dostaµ z ftp.tokyonet.ad.jp.


Konfigurowanie Emacsa

G│≤wnym sposobem konfigurowania Emacsa jest dopisywanie przez ka┐dego u┐ytkownika kodu Lisp do swojego pliku $HOME/.emacs ($HOME/_emacs pod MS-DOS oraz Windows). Informacje o prostych instrukcjach Lisp znajdziesz w podrΩczniku u┐ytkownika Emacs; pe│ny opis jΩzyka jest w Emacs Lisp Reference Manual. Opis ten mo┐na dostaµ osobno w archiwach GNU w przypadku (FSF) Emacsa. W przypadku XEmacsa opis jest dostarczany z dystrybucj▒.

Poza tym, gdy Emacs dzia│a pod X, to tak jak ka┐dy program wczytuje bazΩ danych X resources, zazwyczaj zapisan▒ w pliku $HOME/.Xdefaults. Je┐eli na X resources siΩ nie znasz, nie przejmuj siΩ: jeszcze takiego co by to rozumia│ nie spotka│em.


Ogonki w `zwyk│ych' Emacsach 19 (nie MULE)

Opis wielojΩzykowych wariant≤w (MULE) jest dalej.

Jak zwykle w przypadku znak≤w z ogonkami, do rozwi▒zania jest wy╢wietlanie ich na ekranie oraz wprowadzanie z klawiatury. Dodatkowo dochodz▒ sprawy wygodnej edycji tekst≤w zawieraj▒cych polskie znaki (prawid│owe rozr≤┐nianie liter ma│ych i wielkich, sk│adnia s│≤w jΩzyka).

Znaki o╢mibitowe

Nowsze wersje Emacsa same w│▒czaj▒ wy╢wietlanie znak≤w o╢mibitowych (poza siedmiobitowymi znakami ASCII) je┐eli LOCALE na to pozwala. Je┐eli z jakiegokolwiek powodu u Ciebie to nie dzia│a, dodaj do twojego pliku .emacs liniΩ o tre╢ci:

(standard-display-european t)

Czcionki X

Zdefiniowanie (na sta│e) czcionek dla Emacsa najwygodniej jest zrobiµ za pomoc▒ X resources. Do pliku .Xdefaults nale┐y dodaµ w przypadku (FSF) Emacsa liniΩ typu

Emacs*font: -ibm-courier-medium-r-normal--14-*-*-*-m--iso8859-2
lub, w przypadku XEmacsa (w wersji 19.15),
Emacs.default.attributeFont: -ibm-courier-medium-r-normal--14-*-*-*-m--iso8859-2

W (FSF) Emacs mo┐na zmodyfikowaµ menu czcionek tak, aby udostΩpnia│o r≤wnie┐ polskie czcionki. Mo┐na to zrobiµ dodaj▒c do pliku .emacs lub site-start.el zawarto╢µ tego pliku.

W XEmacs, mo┐na te┐ u┐yµ menu Options->Browse Faces.

Czcionki w konsoli

Emacs powinien wy╢wietlaµ bez k│opotu polskie znaki w czcionce dziedziczonej z konsoli, w kt≤rej zosta│ wywo│any.

Klawiatura

Wsp≤│czesne wersje Emacsa dopuszczaj▒ wprowadzanie znak≤w 8-bitowych, na przyk│ad w konwencji z prawym Alt. Je╢li wiΩc potrafisz wprowadzaµ znaki ISO8859-2 w konsoli tekstowej, albo xtermie, to nie powiniene╢ mieµ k│opot≤w z wprowadzaniem ich w Emacsie. W starszych Emacsach trzeba by│o ratowaµ siΩ umieszczeniem w pliku .emacs instrukcji

(let ((input-mode (current-input-mode)))
  (set-input-mode
    (car input-mode)
    (car (cdr input-mode))
    0))

Je┐eli Tw≤j system nie obs│uguje znak≤w polskich wprowadzanych z klawiatury, mo┐na przeprogramowaµ Emacsa, ┐eby sam to robi│. Poczynaj▒c od (FSF) Emacs 19.30 i XEmacs 19.15 najlepiej (wed│ug J.Ch.) jest u┐yµ programu iso-acc.el. Pakiet ten mo┐na nauczyµ wprowadzania znak≤w polskich poprzez ciach (`/') lub tyldΩ (`~') instaluj▒c i kompiluj▒c ten plik i dodaj▒c do pliku .emacs nastΩpuj▒ce instrukcje:

(load "iso-pol")
(iso-accents-customize "polslash")   ; lub "poltilde"
(global-set-key "\M-P" 'iso-accents-mode)

Rozwi▒zanie to ma tΩ zaletΩ, ┐e dobrze dzia│a z `incremental search', i ┐e u┐ywa pakietu iso-acc.el kt≤ry jest standardow▒ czΩsci▒ Emacsa.

W tym podej╢ciu wprowadzanie polskich liter trzeba w│▒czaµ (mo┐na to zrobiµ jednym klawiszem) w ka┐dym z bufor≤w z osobna. Posiadanie w ka┐dym buforze specyficznej dla niego klawiatury jest naturalne w Emacsie; w konkretnym przypadku znak≤w narodowych mo┐emy mieµ w jednym buforze tekst po polsku, a w innym po francusku.

W starszych wersjach Emacsa iso-acc.el nie pozwala na zmianΩ klawiatury. Mo┐na wtedy u┐yµ programu polish.tar.gz (dla (FSF) Emacs lub XEmacs), kt≤ry pozwala na wprowadzanie polskich liter poprzez dowolny klawisz (domy╢lnie ciach: `/'), na zmiane czcionki w Emacsie oraz na eliminowanie ogonk≤w przy wy╢wietlaniu. Niestety, ten ostatni pakiet nie pozwala na u┐ywanie `kombinacji ciachowych' w incremental search.

Istniej▒ jeszcze takie rozwi▒zania: wprowadzanie poprzez ALT (tyko dla (FSF) Emacs, wprowadzania polskich znak≤w nie da siΩ wy│▒czyµ, nie ma problem≤w z incremental search), oraz wprowadzanie poprzez apostrof (pewnie dzia│a tylko w (FSF) Emacs).

Tabela sk│adni

Tabela sk│adni zawiera dane, umo┐liwiaj▒ce Emacsowi prawid│owe usuwanie lub przeskakiwanie s│≤w, wymianΩ liter ma│ych na wielkie, generalnie za╢ wykonywanie operacji, kt≤rych dzia│anie jest uzale┐nione od klasyfikacji znak≤w. S│owo ``sk│adnia'' jest tu cokolwiek na wyrost, bo chodzi tylko o klasyfikacjΩ znak≤w. W dystrybucji nowszych wersji Emacsa (poczynaj▒c od 19.30) znajduje siΩ plik iso02-syn.el z instrukcjami klasyfikuj▒cymi znaki jΩzyk≤w z grupy ISO-8859-2. TΩ klasyfikacjΩ wprowadzamy do naszego Emacsa przez umieszczenie w pliku .emacs wiersz

(require 'iso02-syn)
W starszych wersjach Emacsa tabelΩ sk│adni nale┐y zmieniµ `na piechotΩ'. Jak to zrobiµ jest opisane tutaj.

R≤┐no╢ci

Konwersje:

Oto funkcje s▒ lispowe
Na problemy ogonkowe
Przekodowaµ s▒ gotowe
Bufor ca│y lub po│owΩ

A kodowa± wiele znaj▒
Kr≤la ISO uwielbiaj▒
Mazowieck▒ czcz▒ MazoviΩ
i Jab│uszko, co siΩ zowie

Pozosta│e wrΩcz szalone
Kodowania niezliczone
Potraktowaµ mog▒ ciachem
Za jednym zamachem

Wiwat Emacs, zuch i chwat
Co╢ Polakom sta│ siΩ brat!

(oda do Emacsa autor≤w programu ogonek.el)

Zmodyfikowany plik iso-cvt.el - konwersja polskich liter do liter │acinskich w formacie TeX z "dorysowanymi" ogonkami (TeX-ohida). (Czy to jeszcze jest potrzebne? -- ob. TeX).

Poprawianie pisowni

W emacsie standardowo dostΩpny jest interfejs do programu ispell (jednak sam program instaluje siΩ oddzielnie). Program mo┐e wsp≤│pracowaµ ze s│ownikami w r≤┐nych jΩzykach i rozumie sk│adniΩ TeXa. Do poprawiania tekst≤w pisanych po polsku mo┐na u┐yµ program≤w podobnych w u┐yciu do ispell - bez rozumienia TeXa, ale z lepszymi podpowiedziami uwzglΩdniaj▒cymi specyfikΩ jΩzyka polskiego i z polskim s│ownikiem (stale rozbudowywanym).

Ogonki w Emacsach wielojΩzycznych (MULE)

Ten rozdzia│ dotyczy wy│▒cznie Emacs≤w wielojΩzycznych (MULE); jest te┐ rozdzia│ dla wszystkich Emacs≤w.

Jedyny wariant Mule, do kt≤rego mam dostΩp, to Emacs-19.28/Mule-2.3; nastΩpuj▒ce informacje mog▒ wiΩc nie dotyczyµ XEmacs-20/Mule (uzupe│nienia i poprawki mile widziane).

System kodowania

W wersji MULE ka┐dy bufor (plik) mo┐e zawieraµ znaki pochodz▒ce z r≤┐nych jΩzyk≤w. BΩd▒ one poprawnie wy╢wietlone przy za│o┐eniu posiadania odpowiednich czcionek.

Przy wczytywaniu lub zapisywaniu plik≤w mo┐na u┐yµ domy╢lnego systemu kodowania znak≤w lub takowy wybraµ. System kodowania mo┐na wybraµ u┐ywaj▒c komendy C-u C-x C-f zamiast C-x C-f (podobnie, C-u C-x C-s, C-u C-x C-w itp.). Odpowiedzialno╢µ za wyb≤r systemu kodowania, kt≤ry zawiera wszystkie potrzebne znaki, nale┐y do u┐ytkownika.

Domy╢lny system kodowania znak≤w mo┐na nastawiµ, dodaj▒c do pliku .emacs nastΩpuj▒ce wiersze:

(set-primary-environment 'european)
(set-default-file-coding-system *iso-8859-2*)

Czcionki X

Prawid│owo zainstalowany MULE powinien automatycznie selekcjonowaµ czcionki. Znaki ASCII (litery `bez ogonk≤w') s▒ brane z czcionki ISO-8859-1.

ZaklΩcia pozwalaj▒ce na wyb≤r innych czcionek (w .Xdefaults):

*FontSetList: 18
*FontSet-18: -adobe-courier-medium-r-normal--18-0-0-0-m--iso8859-1,\
  -adobe-courier-medium-r-normal--*-*-*-*-m--iso8859-1,\
  -ibm-courier-medium-r-normal--*-*-*-*-*-*-iso8859-2

Pierwsza linia definiuje nazwΩ nowego zestawu czcionek. Druga linia definiuje czcionkΩ ASCII (musi mieµ pole `registry' r≤wne iso8859-1) a potem inne czcionki, w dowolnej kolejno╢ci.

Klawiatura

Pod MULE klawiatura jest opcjonalnie pod kontrol▒ programu quail. Po wystukaniu M-x quail-mode <RET> klawisz M-s pozwala na zmianΩ klawiatury. Niestety nie ma klawiatury specyficznie polskiej (│atwo by│oby tak▒ dodaµ, mo┐e to kiedy╢ zrobiΩ), wiΩc trzeba u┐ywaµ generycznej klawiatury latin-2.

Inwestygacje na temat (FSF) Emacs-20 oraz XEmacs-20/Mule trwaj▒...


Poczta i Newsy

Wielu ludzi czyta pocztΩ i Newsy w Emacsie; istniej▒ do tego nastΩpuj▒ce programy:

W tej li╢cie, tylko VM standardowo obs│uguje MIME; dla innych najlepiej jest u┐yµ Tools for Mime (TM). TM s▒ instalowane z XEmacsem w wersjach 19.15 i po╝niejszych (n.b. 20.0 jest wcze╢niejsza ni┐ 19.15); dla innych Emacs≤w trzeba je ╢ci▒gn▒µ i zainstalowaµ z ftp.jaist.ac.jp.

W wersjach MULE, pakiet TM automatycznie u┐ywa prawid│owych nag│≤wk≤w w zale┐no╢ci od zawarto╢ci poczty. W zwyk│ych Emacsach trzeba go skonfigurowaµ ┐eby u┐ywa│ ISO-8859-2 pedibus calcantibus, dodaj▒c do .emacs nastΩpuj▒c▒ liniΩ:

(setq default-mime-charset 'iso-8859-2)
oraz, je┐eli tw≤j mailer pozwala na wysy│anie o╢miobitowego MIME, ewentualnie
(setq mime-editor/transfer-level 8)

DziΩki tym instrukcjom TM wysy│a pocztΩ kodowan▒ 8-bitowo ze zdefiniowanym zestawem znak≤w ISO-8859-2, je╢li wykrywa w niej polskie litery. Je╢li takich liter tam nie ma, to poczta wychodzi jako `text/plain; charset=US-ASCII'.

Dla hacker≤w: sam u┐ywam lekko zmodyfikowan▒ wersjΩ TM kt≤ra automatycznie prze│▒cza czcionki. Patche s▒ dostΩpne. (Ja? Odpowiedzialny? You must be joking...)

Je┐eli nie chcesz u┐ywaµ TM, mo┐na zaprogramowaµ Emacsa ┐eby automatycznie wk│ada│ prawid│owe nag│≤wki. W Gnus, poczynaj▒c od wersji 5.2, mo┐na to zrobiµ za pomoc▒ zaklΩcia:

(setq message-default-headers
      (concat
        "MIME-Version: 1.0\n"
        "Content-Type: text/plain; charset=iso-8859-2;\n"
        "Content-Transfer-Encoding: 8bit\n"))

Juliusz Chroboczek <jec@dcs.ed.ac.uk>, z pomoc▒ Ryszarda Kubiaka <rysiek@ipipan.gda.pl>, Jana Daciuka <jandac@pg.gda.pl> i innych.