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>