Poniższy tekst opisuje co należy wstawić do pliku ~/.emacs, aby zapewnić obsługę polskich liter w edytorze GNU emacs. Można w nim wyróżnić trzy grupy funkcji:
  1. Definicje funkcji wstawiających polskie znaki do bufora. Znaki w kodzie ISO8859-2.
  2. Przypisanie tych funkcji klawiszom Alt+litera i Alt+Shift+litera Te przypisania działają na klawiaturze SUN starszego typu (a la AT) pod SunOS 4.1.3. Nie mam teraz możliwości przetestowania ich na innych maszynach. Jeśli nie działają, to modyfikacja powinna być bardzo prosta: należy wywołać funkcję global-set-key, nacisnąć pożądaną sekwencję klawiszy, wpisać odpowiednią funkcję insert-*, nacisnąć RET. Następnie C-x ESC ESC (repeat-complex-command), C-a C-k C-g (zachowanie w buforze) i C-y w odpowiednim miejscu .emacs.
  3. Modyfikacja tablicy okreslającej typ znaku (czy może stanowić część słowa) i w przypadku liter - ich `wielkość' (mała czy wielka litera). Jest to potrzebne do prawidłowego działania funkcji forward-word, downcase-word itp.

Funkcje wstawiające znaki do bufora

Definicje potrzebne są, by można było definiowane funkcje przypisać odpowiednim klawiszom. Można z nich jednak korzystać wywołując je przez nazwę (np. poprawiając plik zdalnie z byle jak skonfigurowanego komputera). Definicje należy umieścić w pliku .emacs.
; Polish characters
(defun insert-a-ogonek ()
  (interactive "*")
  (insert 177)
)

(defun insert-c-acute ()
  (interactive "*")
  (insert 230)
)

(defun insert-e-ogonek ()
  (interactive "*")
  (insert 234)
)

(defun insert-l-slash ()
  (interactive "*")
  (insert 179)
)

(defun insert-n-acute ()
  (interactive "*")
  (insert 241)
)

(defun insert-o-acute ()
  (interactive "*")
  (insert 243)
)

(defun insert-s-acute ()
  (interactive "*")
  (insert 182)
)

(defun insert-z-acute ()
  (interactive "*")
  (insert 188)
)

(defun insert-z-dot ()
  (interactive "*")
  (insert 191)
)

(defun insert-A-ogonek ()
  (interactive "*")
  (insert 161)
)

(defun insert-C-acute ()
  (interactive "*")
  (insert 198)
)

(defun insert-E-ogonek ()
  (interactive "*")
  (insert 202)
)

(defun insert-L-slash ()
  (interactive "*")
  (insert 163)
)

(defun insert-N-acute ()
  (interactive "*")
  (insert 209)
)

(defun insert-O-acute ()
  (interactive "*")
  (insert 211)
)

(defun insert-S-acute ()
  (interactive "*")
  (insert 166)
)

(defun insert-Z-acute ()
  (interactive "*")
  (insert 172)
)

(defun insert-Z-dot ()
  (interactive "*")
  (insert 175)
)

Przypisanie klawiszom funkcji

Uwaga: przypisania działają na klawiaturze typu AT na SUNach pracujących pod kontrolą SunOS 4.1.3. Mogą być inne (i pewnie będą) na innym sprzęcie i z innym systemem operacyjnym. W celu zdefiniowania własnych przypisań należy zastoswać opisaną niżej procedurę (klawisz Alt może być zastąpiony innym). Zakładamy, że edycji poddajemy plik .emacs. Dla przykładu przypiszmy insert-a-ogonek do Alt-a:
M-x global-set-key
Wywołanie funkcji definiującej przypisania klawiszy
Alt-a
To należy nacisnąć, tzn. klawisz Alt i klawisz a
insert a ogonek
Nazwa funkcji, która będzie wywołana po naciśnięciu Alt-a
RET
Tzn. nacisnąć klawisz Return (lub Enter)
C-x ESC ESC
czyli Control-x i dwa razy klawisz Escape - wywołanie funkcji repeat-complex-command. Zapis lispowy wywołania funkcji global-set-key z gotowymi parametrami pojawia się w minibuforze.
C-a
Ustawiamy kursor na początku definicji
C-k
Kasujemy definicję (i umieszczamy ją w buforze rzeczy skasowanych)
C-g
Przerywamy wykonanie polecenia i wracamy do edycji pliku .emacs
C-y
Wstawiamy skasowaną definicję do pliku.
; key bindings for Polish characters: Alt - lowercase, Alt+Shift - uppercase
(global-set-key (quote [4194401]) (quote insert-a-ogonek)) ; A-a
(global-set-key (quote [4194403]) (quote insert-c-acute)) ; A-c
(global-set-key (quote [4194405]) (quote insert-e-ogonek)) ; A-e
(global-set-key (quote [4194412]) (quote insert-l-slash)) ; A-l
(global-set-key (quote [4194414]) (quote insert-n-acute)) ; A-n
(global-set-key (quote [4194415]) (quote insert-o-acute)) ; A-o
(global-set-key (quote [4194419]) (quote insert-s-acute)) ; A-s
(global-set-key (quote [4194424]) (quote insert-z-acute)) ; A-x
(global-set-key (quote [4194426]) (quote insert-z-dot)) ; A-z
(global-set-key (quote [4194369]) (quote insert-A-ogonek)) ; A-A
(global-set-key (quote [4194371]) (quote insert-C-acute)) ; A-C
(global-set-key (quote [4194373]) (quote insert-E-ogonek)) ; A-E
(global-set-key (quote [4194380]) (quote insert-L-slash)) ; A-L
(global-set-key (quote [4194382]) (quote insert-N-acute)) ; A-N
(global-set-key (quote [4194383]) (quote insert-O-acute)) ; A-O
(global-set-key (quote [4194387]) (quote insert-S-acute)) ; A-S
(global-set-key (quote [4194392]) (quote insert-Z-acute)) ; A-X
(global-set-key (quote [4194394]) (quote insert-Z-dot)) ; A-Z

Składnia

Umieszczone poniżej instrukcje są potrzebne do tego, by prawidłowo działaly funkcje przejścia do następnego/poprzedniego słowa, zamiany znaków na wielkie/małe itp. Działają w emacsie do wersji 19.28 (być może także w 19.29). W nowszych wersjach nie będą działać. Należy wówczas skorzystać z pakietu iso02-syn.
; case table entries for Polish characters
(let ((downcase (concat (car (standard-case-table)))))
  (set-case-syntax-pair 161 177 downcase) ; Aa with ogonek
  (set-case-syntax-pair 198 230 downcase) ; Cc with acute
  (set-case-syntax-pair 202 234 downcase) ; Ee with ogonek
  (set-case-syntax-pair 163 179 downcase) ; Ll with slash
  (set-case-syntax-pair 209 241 downcase) ; Nn with acute
  (set-case-syntax-pair 211 243 downcase) ; Oo with acute
  (set-case-syntax-pair 166 182 downcase) ; Ss with acute
  (set-case-syntax-pair 172 188 downcase) ; Zz with acute
  (set-case-syntax-pair 175 191 downcase) ; Zz with dot
  (set-standard-case-table (list downcase nil nil nil)))
Powodzenia!
Jan Daciuk <jandac@pg.gda.pl>