Вживання укра╖нсько╖ мови в emacs '╕ базу╓ться в основному на використанн╕ модуля ukrainian.el . Цей модуль дозволя╓ друкувати к╕лькома р╕зними кодовими таблицями, перекодовувати тексти з одних кодових таблиць в ╕нш╕, використовувати р╕зн╕ розкладки клав╕атури, тощо.
Разом з emacs 'ом можливе також використання стандартних драйвер╕в клав╕атури для Юн╕кса. ╤сну╓ к╕лька таких драйвер╕в, придатних для друку укра╖нською мовою. В залежност╕ в╕д середовища, в якому ви плану╓те використовувати emacs , ви можете обрати той чи ╕нший драйвер. Для X ╕снують так╕ програми, як xrus та kikbd. Xrus може працювати в к╕лькох р╕зноман╕тних Юн╕ксах, в той час як kikbd ╓ стандартною складовою KDE ╕ тому обмежений до тих систем, на яких KDE працю╓.
Однак стандартн╕ клав╕атурн╕ драйвери мають один сутт╓вий недол╕к при робот╕ з emacs 'ом. Драйвери дають вам можлив╕сть друку укра╖нською та англ╕йською мовами. Але коли ви друку╓те укра╖нською (тобто знаходитесь в укра╖нському режим╕), ви не можете виконати жодно╖ команди emacs 'у. Тому, перш н╕ж виконати будь-яку команду, потр╕бно перемикнутися в англ╕йський режим, виконати команду ╕, повернувшись в укра╖нський режим, продовжувати друкувати. Пост╕йне перемикання з одного режиму в ╕нший дуже незручне. ╤ тому, тут я зупинюся т╕льки на використанн╕ модуля ukrainian.el , ╕ не буду торкатися ╕нших питань.
Дуже ч╕тке ╕ доступне пояснення вживання укра╖нсько╖ мови в emacs '╕ написане Степаном Бобиком на його стор╕нц╕. На ц╕й стор╕нц╕ йдеться лише про деяк╕ доповнення до цього матер╕алу, а саме так╕ детал╕, як╕ дещо покращують роботу з модулем.
Через деяк╕ розб╕жност╕ в типах даних в elisp'╕ GNU Emacs 'а та elisp'╕ X Emacs 'а модуль, написаний для GNU Emacs 'а, не працю╓ з X Emacs 'ом.
Тут ви можете знайти трохи видозм╕нену верс╕ю ukrainian.el , яка дозволя╓ працювати з обома верс╕ями emacs '╕в.
Починаючи з верс╕╖ 20.x як Emacs , так ╕ X Emacs мають п╕дтримку для багатьох мов. Ця п╕дтримка з'явилася з часу по╓днання двох окремих проект╕в - emacs та mule ( MU lti L anguage E macs).
В нових верс╕ях emacs '╕в значно зм╕нене внутр╕шн╓ подання тексту. В переважн╕й б╕льшост╕ текстових редактор╕в текст уявля╓ться звичайною посл╕довн╕стю байт╕в. ╤ таке подання справедливе до того часу, поки йде обробка так званих "малих" писемних систем. До малих систем в╕дносяться практично вс╕ мови ╢вропи ╕ багато мов ╕нших ре╜╕он╕в - тобто вс╕ мови з абеткою. Для "великих" писемних систем - ╕╓ро╜л╕ф╕чн╕ системи писемност╕ (китайська, японська), так╕ мови, як арабська, корейська, тощо - одного байту (всього 256 символ╕в) не вистача╓. Тож mule (а тепер emacs ) намага╓ться розв'язати це питання шляхом використання б╕льше, н╕ж одного байту на л╕теру.
Дякуючи цьому, emacs , в якому включена п╕дтримка багатобайтного подання тексту, дуже часто робить не те, що вам би хот╕лося. ╤ нав╕ть, якщо на перший погляд все йде, так як треба, п╕зн╕ше може виявитися, що не вс╕ функц╕╖ в модул╕ ukrainian.el працюють.
Якщо новий emacs п╕дтриму╓ багато мов, то нав╕що ж тод╕ ще використання ще якогось модуля? В╕дпов╕дь дуже проста: новий emacs не п╕дтриму╓ укра╖нсько╖ мови. ╤ на даний час (жовтень 1999) ще не в╕домо коли буде п╕дтримувати. П╕дтримка рос╕йсько╖ мови, яка ╕сну╓ зараз в обох emacs 'ах для укра╖нсько╖ не п╕дходить, ╕, як виявилося, не вже легко додати т╕ к╕лька л╕тер, яких не вистача╓.
Якщо ви ма╓те (x) emacs 'а номер верс╕╖ якого, 20 або б╕льше (перев╕рити верс╕ю можна за допомогою emacs -version ), то щоб модуль ukrainian.el працював так як треба, сл╕д додати ще один параметр при старт╕ emacs 'у:
emacs --unibyte [дал╕ т╕ параметри, якими ви користувалися]
Цей параметр в╕дключа╓ п╕дтримку для всих тих мов, як╕ закладен╕ в emacs . Але я спод╕ваюся, що б╕льшост╕ укра╖номовних користувач╕в нема╓ необх╕дност╕ користуватися японською, китайською, тощо. Тому таке р╕шення задовольнить всих тих, кому потр╕бна англ╕йська та укра╖нська. П╕сля встановлення модуля russian.el, можливо також користування рос╕йською. Дал╕ йде про те, як користуватися трьома мовами одночасно.
Дал╕ я переходжу до основно╖ частини свого твору. Вона склада╓ться ╕з того тексту, який необх╕дно додати до файлу . emacs , та мо╖х коментар╕в до цього тексту. Нав╕ть, якщо ви не розум╕╓те про що йде мова, просто "cut-n-paste" вс╕ ц╕ шматки lisp коду, вставте його в . emacs ╕ ви готов╕.
Одним (одним ╕з?) недол╕ком укра╖нського режиму при користуванн╕ ukrainian.el ╓ те, що emacs не розум╕╓ укра╖нсько╖ абетки. Вс╕ укра╖нськ╕ л╕тери в ньому вважаються розд╕ловими знаками. ╤ тому будь-яка команда типу стерти слово вперед/назад (M-x backward-kill-word, M-x forward-kill-word) може зак╕нчитися крахом - emacs з╕тре весь укра╖нський текст в╕д курсора до першо╖ англ╕йсько╖ л╕тери. Теж саме стосу╓ться пересування по тексту: команди M-x forward-word, M-x backward-word (клав╕ш╕ - M-<стр╕лка праворуч>, M-<стр╕лка л╕вовуч>) пересуваються по тексту не словами, а англ╕йськими л╕терами.
Наступний текст дозволя╓ виправити ц╕ помилки. Зм╕нн╕ cuc та clc доповнюють emacs великими та малими л╕терами укра╖нсько╖ мови. Але, ця модиф╕кац╕я працю╓ т╕льки для кодово╖ таблиц╕ koi8-u. Саме цьому я не включаю ц╕ визначення в текст модуля ukrainian.el , для цього потр╕бно було б щось сол╕дн╕ше - хоча б для к╕лькох кодових таблиць.
;;;;;; Ukrainian/Russian viewing/input setting
;;;
;;
;; D.Kovalev (DK) kov@tokyo.email.ne.jp :- Some customizations around
;; ukrainian.el, russian.el and Cyrillic HOWTO from Linux HOWTO's
;;
;; From Cyrillic HOWTO by Belikov :
;;
;; [...] Emacs doesn't know yet, that Cyrililic characters may
;; constitute a word, let alon the upper/lower case conversion
;; rules. In order to teach Emacs doing that, you have to modify the
;; syntax and case tables of emacs :
;;
(require 'case-table)
;; added 4 Ukrainian letters (DK)
;; ╕ \246\266
;; ╖ \247\267
;; ╜ \255\275
;; ╓ \244\264
;;
;; Also changed r?c -> c?c from the source to be politically
;; correct. It's supposed to be 'Cyrillic Character', not 'Russian',
;; right? (DK)
;;
; Attention !!! included here
; works only for KOI8-U, for
; other encodings 'cuc' and
; 'cul' entries must be
; redefined.
(let* ((cuc "\266\267\275\264\341\342\367\347\344\345\263\366\372\351\352\353\354\355\356\357\360\362\363\364\365\346\350\343\376\373\375\370\371\377\374\340\361")
(clc "\246\247\255\244\301\302\327\307\304\305\243\326\332\311\312\313\314\315\316\317\320\322\323\324\325\306\310\303\336\333\335\330\331\337\334\300\321")
(i 0)
(len (length cuc)))
(while (< i len)
(modify-syntax-entry (elt cuc i) "w ")
(modify-syntax-entry (elt clc i) "w ")
(set-case-syntax-pair (elt cuc i) (elt clc i) (standard-case-table))
(setq i (+ i 1))))
Дякуючи цим модиф╕кац╕ям також можливо користуватися функц╕ями переведення сл╕в ╕з ре╜╕стру в ре╜╕стр - тобто ╕з малих укра╖нських л╕тер в велик╕, ╕ навпаки.
В цьому розд╕л╕ н╕чого нового нема╓. Все повн╕стю взяте ╕з переписки з Степаном Бобиком ╕ може бути знайденим на його стор╕нц╕ з укра╖н╕зац╕╖ emacs 'у. Тому я привожу тут це без всяких коментар╕в:
;; Ukrainian displaying mode -- file: ukrainian.el --------------
;; From Stephen Bobik
; Force the upper part of the
; ascii displayed as-it-is
(standard-display-8bit 160 255)
; Load the emacs lisp code to
; perform koi8 text
; transformations.
Для вживання рос╕йсько╖ мови в emacs '╕ ╕сну╓ ╕нший модуль - russian.el (в╕д якого походить ukrainian.el ). emacs дозволя╓ користуватися обома модулями одночасно. Для цього потр╕бно завантажити обидва модул╕ в emacs , це робиться за допомогою двох наступних рядк╕в тексту. Зверн╕ть увагу, що в мо╖й систем╕ вс╕ модул╕ в emacs Lisp'╕ знаходяться в директор╕╖ ~/.lisp . Зм╕н╕ть цю назву в╕дпов╕дно до вашо╖ системи.
(load-file "~/.lisp/ukrainian.el")
(load-file "~/.lisp/russian.el")
Але, переходити ╕з укра╖нського режиму в рос╕йський безпосередньо неможливо. Якщо ви, знаходячись, наприклад, в укра╖нському режим╕ спробу╓те виконати команду M-x russian-insertion-mode , emacs перейде в якийсь нев╕домий режим ╕ почне друкувати бозна що. Для того, щоб коректно перейти з режиму в режим, потр╕бно спочатку вийти з укра╖нського режиму (командою M-x ukrainian-insertion-mode , а пот╕м вже вмикати рос╕йський режим командою M-x russian-insertion-mode .
З урахуванням цього я додав к╕лька нових функц╕й, як╕ теж мають сво╓ м╕сце в . emacs , ╕ забезпечують необх╕дну функц╕ональн╕сть. Функц╕я toggle-ukrainian , перш за все вимика╓ рос╕йський режим (не залежно в╕д того був в╕н вмикнений, чи н╕), а пот╕м вже перемика╓ укра╖нський режим (тобто перемика╓ться з укра╖нського в англ╕йський ╕ навпаки).
;; Because I have both Ukrainian and Russian in my emacs I need
;; following. If I, let's say, in Ukrainian insertion mode and want to
;; switch to Russian, I need to switch Ukrianian off first and *then*
;; turn Russian on. If I do 'M-x russian-insertion-mode', without
;; doing 'M-x ukrainian-insertion-mode' my keyboard ends up all
;; screwed. And vice-versa for switching from R -> U. So the
;; following 2 functions defined to provide easy "cross" switching
;; from one mode into another. (-DK)
(defun toggle-ukrainian ()
(interactive)
"Make sure the Russian is off first and then toggle Ukrainian"
(russian-insertion-mode -1)
(ukrainian-insertion-mode)
)
Функц╕я toggle-russian працю╓ анало╜╕чно до toggle-ukrainian .
(defun toggle-russian ()
(interactive)
"Turn off Ukrainian mode before setting Russian mode"
(ukrainian-insertion-mode -1)
(russian-insertion-mode)
)
Для того, щоб було зручно перемикати клав╕атуру з одного режиму в ╕нший, в мо╓му . emacs визначен╕ так╕ "клав╕атурн╕ прискорювач╕":
(global-set-key "\C-c\C-u" 'toggle-ukrainian)
(local-set-key "\C-c\C-u" 'toggle-ukrainian)
(global-set-key "\C-c\C-r" 'toggle-russian)
(local-set-key "\C-c\C-r" 'toggle-russian)
CTRL-C, CTRL-U вмика╓/вимика╓ укра╖нський режим, а CTRL-C, CTRL-R - рос╕йський.
Я - давн╕й Мак╕нтошевський фан. Першим комп'ютером, в якому з'явилася справжня п╕дтримка багатомовних середовищ, був (╕ багато в чому залиша╓ться ╓диним до сьогодн╕шнього дня) Мак╕нтош. Я дуже довго користувався Мак╕нтошем ╕ довгий час в emacs '╕ мен╕ не вистачало тих клав╕ш, якими я перемикався з мови на мову в Мак╕нтош╕ - < CMD >-< SPACE >. ╤ хоча, звичайно, я не мав н╕яко╖ над╕╖ знайти на сво╖й п╕с╕шн╕й (чи нав╕ть спарк╕вськ╕й) клав╕атур╕ клав╕шу < CMD >, але мене не полишали спод╕вання зам╕нити ╖╖ на < ALT >.
Наступний шматок коду дозволя╓ вмикати/вимикати укра╖нський режим за допомогою < Alt >-< ПРОПУСК >.
;Aug 11 1999
;; Two more bindings for Ukrainan - -
(local-set-key [?\M- ] 'toggle-ukrainian)
(global-set-key [?\M- ] 'toggle-ukrainian)
;;
;; End of Ukrainian/Cyrillic settings
;;
Дал╕ - в стисл╕й форм╕ про користування модулем ukrainian.el , особливо там, де це стосу╓ться нових можливостей.
Наступн╕ команди ╓ стандартними для emacs 'а. Я ╖х приводжу тут т╕льки тому, що без тих зм╕н, як╕ описан╕ в цьому документ╕, вони не працюють з укра╖нською мовою.
Модуль ukrainian.el дозволя╓ не т╕льки передивлятися та редагувати тексти р╕зними кодовими таблицями, але ╕ перекодовувати тексти ╕з одн╕╓╖ кодово╖ таблиц╕ в ╕ншу. Для цього в╕н ма╓ дв╕ функц╕╖ - ukrainian-translate-buffer та ukrainian-translate-region.
Перша функц╕я трансл╕теру╓ весь текст в в╕дкритому буфер╕, друга - т╕льки вид╕лений блок тексту.
Якщо ви, наприклад, отримали листа, написаного на В╕ндовс'╕ в кодов╕й таблиц╕ windows-1251, а ма╓те шрифти т╕льки для koi8-u, в╕дкрийте отриманий файл в emacs '╕. ╤ виконайте так╕ команди:
Якщо вам доводиться конвертувати тексти досить часто (або просто л╕ньки кожного разу в╕дкривати текст ╕ друкувати ц╕ к╕лька команд), ви можете написати дуже простенький скрипт для конвертування текст╕в.
В╕дкрийте emacs ╕ надрукуйте в ньому вс╕ п╕дряд укра╖нськ╕ л╕тери. Порядок л╕тер не ма╓ н╕якого значення, ╕ тому, щоб н╕чого не пропустити, я друкую вс╕ п╕дряд клав╕ш╕ на клав╕атур╕:
йцукенгшщзх╜фивапролдж╓ячсм╕тьбюЙЦУКЕНГШЩЗХ╫ФИВАПРОЛДЖ╢ЯЧСМ╤ТЬБЮ╖╥
Дал╕ зроб╕ть коп╕ю всього цього рядка, ╕ за допомогою функц╕╖ ukrainian-translate-region перевед╕ть один ╕з рядк╕в в кодову таблицю ╕з яко╖ (або в яку) ви збира╓тесь перекладати тексти. Дал╕ додайте лапки навколо цих текстових рядк╕в, додайте назву команди для трансл╕терац╕╖ tr ╕ ще один невеликий рядок на вершин╕ файлу ╕ ваш текстовий ф╕льтр готовий.
Наступний ф╕льтр переводить тексти ╕з Windows-1251 в KOI8-U .
#!/bin/sh
tr \
'ИЖСЙЕМЦЬЫГУ╢ТХБЮОПНКДФ╨ЪВЯЛЁРЭАЧижсйемцьыгу╔тхбюопнкдф╙ъвял╡рэач©╞' \
'йцукенгшщзх╜фивапролдж╓ячсм╕тьбюЙЦУКЕНГШЩЗХ╫ФИВАПРОЛДЖ╢ЯЧСМ╤ТЬБЮ╖╥'
Протилежний до нього, який переклада╓ ╕з KOI8-U в Windows-1251 ╓ такий:
#!/bin/sh
tr \
'йцукенгшщзх╜фивапролдж╓ячсм╕тьбюЙЦУКЕНГШЩЗХ╫ФИВАПРОЛДЖ╢ЯЧСМ╤ТЬБЮ╖╥'
'ИЖСЙЕМЦЬЫГУ╢ТХБЮОПНКДФ╨ЪВЯЛЁРЭАЧижсйемцьыгу╔тхбюопнкдф╙ъвял╡рэач©╞' \
Дмитро Ковальов,
Ток╕о, жовтень 1999 р.
kov@tokyo.email.en.jp