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.