Вживання укра?нсько? мови в emacs '? базу?ться в основному на використанн?
модуля ukrainian.el . Цей модуль дозволя? друкувати к?лькома р?зними
кодовими таблицями, перекодовувати тексти з одних кодових таблиць в ?нш?,
використовувати р?зн? розкладки клав?атури, тощо.
Разом з emacs 'ом можливе також використання стандартних драйвер?в
клав?атури для Юн?кса. ?сну? к?лька таких драйвер?в, придатних для друку
укра?нською мовою. В залежност? в?д середовища, в якому ви плану?те
використовувати emacs , ви можете обрати той чи ?нший драйвер. Для X ?снують
так? програми, як xrus та kikbd. Xrus може працювати в к?лькох р?зноман?тних
Юн?ксах, в той час як kikbd ? стандартною складовою KDE ? тому обмежений до
тих систем, на яких KDE працю?.
Однак стандартн? клав?атурн? драйвери мають один сутт?вий недол?к при робот?
з emacs 'ом. Драйвери дають вам можлив?сть друку укра?нською та англ?йською
мовами. Але коли ви друку?те укра?нською (тобто знаходитесь в укра?нському
режим?), ви не можете виконати жодно? команди emacs 'у. Тому, перш н?ж
виконати будь-яку команду, потр?бно перемикнутися в англ?йський режим,
виконати команду ?, повернувшись в укра?нський режим, продовжувати
друкувати. Пост?йне перемикання з одного режиму в ?нший дуже незручне. ?
тому, тут я зупинюся т?льки на використанн? модуля ukrainian.el , ? не буду
торкатися ?нших питань.
Дуже ч?тке ? доступне пояснення вживання укра?нсько? мови в emacs '?
написане Степаном Бобиком на його стор?нц?. На ц?й стор?нц? йдеться лише про
деяк? доповнення до цього матер?алу, а саме так? детал?, як? дещо покращують
роботу з модулем.
Зм?ни до модуля ukrainian.el
Через деяк? розб?жност? в типах даних в elisp'? GNU Emacs 'а та elisp'? X
Emacs 'а модуль, написаний для GNU Emacs 'а, не працю? з X Emacs 'ом.
Тут ви можете знайти трохи видозм?нену верс?ю ukrainian.el , яка дозволя?
працювати з обома верс?ями emacs '?в.
Старт 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
Дал? я переходжу до основно? частини свого твору. Вона склада?ться ?з того
тексту, який необх?дно додати до файлу . emacs , та мо?х коментар?в до цього
тексту. Нав?ть, якщо ви не розум??те про що йде мова, просто "cut-n-paste"
вс? ц? шматки lisp коду, вставте його в . emacs ? ви готов?.
Як змусити 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 показував укра?нськ? л?тери
В цьому розд?л? н?чого нового нема?. Все повн?стю взяте ?з переписки з
Степаном Бобиком ? може бути знайденим на його стор?нц? з укра?н?зац?? emacs
'у. Тому я привожу тут це без всяких коментар?в:
;; Ukrainian displaying mode — file: ukrainian.el --------------
;; From Stephen Bobik
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)
(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
Дал? - в стисл?й форм? про користування модулем ukrainian.el , особливо
там, де це стосу?ться нових можливостей.
Вмикнути/вимкнути укра?нську клав?атуру
M-x ukrainian-insertion-mode або
Ctrl-c Ctrl-u або
M-Space
Наступн? команди ? стандартними для emacs 'а. Я ?х приводжу тут т?льки тому,
що без тих зм?н, як? описан? в цьому документ?, вони не працюють з
укра?нською мовою.
Слово вперед/ слово назад
вперед
M-x forward-word або
M-f або
M-<стр?лка праворуч>
назад
M-x backward-word або
M-b або
M-<стр?лка л?воруч>
Стерти слово
праворуч в?д курсора
M-d
л?воруч в?д курсора
M-Del або
M-Backspace
Зм?нити ре??стр слова
праворуч в?д курсора
на мал? л?тери
M-l
на велик? л?тери
M-u
початок речення (перша л?тера велика, вс? ?нш? - мал?)
M-c
л?воруч в?д курсора
на мал? л?тери
M-"-" M-l
на велик? л?тери
M-"-" M-u
початок речення (перша л?тера велика, вс? ?нш? - мал?)
M-"-" M-c
К?лька корисних порад
Конвертування ?з одн??? кодово? таблиц? в ?ншу (трансл?терац?я) за допомогою
emacs'а.
Модуль ukrainian.el дозволя? не т?льки передивлятися та редагувати тексти
р?зними кодовими таблицями, але ? перекодовувати тексти ?з одн??? кодово?
таблиц? в ?ншу. Для цього в?н ма? дв? функц?? - ukrainian-translate-buffer
та ukrainian-translate-region.
Перша функц?я трансл?теру? весь текст в в?дкритому буфер?, друга - т?льки
вид?лений блок тексту.
Якщо ви, наприклад, отримали листа, написаного на В?ндовс'? в кодов?й
таблиц? windows-1251, а ма?те шрифти т?льки для koi8-u, в?дкрийте отриманий
файл в emacs '?. ? виконайте так? команди:
M-x ukrainian-translate-buffer
emacs запита? про кодову таблицю, з яко? треба трансл?терувати текст.
Введ?ть у в?дпов?дь: cp1251
дал? emacs запита? про кодову таблицю, в яку треба трансл?терувати текст.
Введ?ть у в?дпов?дь: 8koi.
Скрипт для трансл?терац?? текст?в
Якщо вам доводиться конвертувати тексти досить часто (або просто л?ньки
кожного разу в?дкривати текст ? друкувати ц? к?лька команд), ви можете
написати дуже простенький скрипт для конвертування текст?в.
В?дкрийте 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





