Date: 16 Nov 96
From: Dima Barsky 

В  традиционном  методе  русификации клавиатуры (через xmodmap)
переключается  состояние  всего  X-сервера,  а   не   отдельных
клиентов.  Это  мне  кажется  неудобным.  Если  у  тебя включен
русский регистр, сразу же начинаются проблемы с  window  manag­
erом,  перестают  работать  Control  кнопки, и т.д... Хорошо бы
уметь переключать регистр для каждой программы независимо  (что
поначалу кажется невозможным).

Подумавши  немного  я  понял,  что  писать  по-русски  мне (да,
видимо,  и  большинству  других  людей)  нужно  всего  в   двух
программах   -   xterm  и  emacs.  Обоих  можно  русифицировать
независимо. Для emacs'a я взял cyr.el от Димы Манина,
http://camelot.mssm.edu/~manin/cyr.el
немного  его  подшаманил и отдал ему назад. Теперь он вроде бы
работает как для Emacs'a так и для XEmacs'а.

А  для  xterm  пришлось  написать  свой  resource-file  и в нем
переопределить все translations.  После  чего  надо  xmodmap'ом
переопределить  только  одну  кнопку,  которая  будет  в xtermе
регистр переключать, например вот так:

xmodmap -e "remove lock = Caps_Lock"
xmodmap -e "keysym Caps_Lock = Execute"

Эту же кнопку можно и в emacs'e для переключения регистров использовать.

Дима.
----------------------- CUT HERE: XTerm.ad  -----------------------------
*VT100.eightBitInput:  True
*VT100.eightBitOutput: True

*VT100.translations: #replace \
        Execute:	keymap(cyrillic) set-reverse-video(on)\n\
          Shift  Prior: scroll-back(1,halfpage) \n\
           Shift  Next: scroll-forw(1,halfpage) \n\
         Shift  Select: select-cursor-start() \
                                  select-cursor-end(PRIMARY, CUT_BUFFER0) \n\
         Shift  Insert: insert-selection(PRIMARY, CUT_BUFFER0) \n\
                 ~Meta: insert-seven-bit() \n\
                  Meta: insert-eight-bit() \n\
                !Ctrl : popup-menu(mainMenu) \n\
           !Lock Ctrl : popup-menu(mainMenu) \n\
                ~Meta : select-start() \n\
              ~Meta : select-extend() \n\
                !Ctrl : popup-menu(vtMenu) \n\
           !Lock Ctrl : popup-menu(vtMenu) \n\
          ~Ctrl ~Meta : ignore() \n\
            ~Ctrl ~Meta : insert-selection(PRIMARY, CUT_BUFFER0) \n\
                !Ctrl : popup-menu(fontMenu) \n\
           !Lock Ctrl : popup-menu(fontMenu) \n\
          ~Ctrl ~Meta : start-extend() \n\
              ~Meta : select-extend() \n\
                                  :select-end(PRIMARY, CUT_BUFFER0) \n\
                       : bell(0)


*VT100.cyrillicKeymap.translations: #override \
        Execute: keymap(None) set-reverse-video(off) \n\
        Return: insert() \n\
	Shift`: string("0xe0")\n\
	!`: string("0xc0")\n\
	Shifta: string("0xe1")\n\
	!a: string("0xc1")\n\
	Shiftb: string("0xe2")\n\
	!b: string("0xc2")\n\
	Shiftc: string("0xe3")\n\
	!c: string("0xc3")\n\
	Shiftd: string("0xe4")\n\
	!d: string("0xc4")\n\
	Shifte: string("0xe5")\n\
	!e: string("0xc5")\n\
	Shiftf: string("0xe6")\n\
	!f: string("0xc6")\n\
	Shiftg: string("0xe7")\n\
	!g: string("0xc7")\n\
	Shifth: string("0xe8")\n\
	!h: string("0xc8")\n\
	Shifti: string("0xe9")\n\
	!i: string("0xc9")\n\
	Shiftj: string("0xea")\n\
	!j: string("0xca")\n\
	Shiftk: string("0xeb")\n\
	!k: string("0xcb")\n\
	Shiftl: string("0xec")\n\
	!l: string("0xcc")\n\
	Shiftm: string("0xed")\n\
	!m: string("0xcd")\n\
	Shiftn: string("0xee")\n\
	!n: string("0xce")\n\
	Shifto: string("0xef")\n\
	!o: string("0xcf")\n\
	Shiftp: string("0xf0")\n\
	!p: string("0xd0")\n\
	Shiftq: string("0xf1")\n\
	!q: string("0xd1")\n\
	Shiftr: string("0xf2")\n\
	!r: string("0xd2")\n\
	Shifts: string("0xf3")\n\
	!s: string("0xd3")\n\
	Shiftt: string("0xf4")\n\
	!t: string("0xd4")\n\
	Shiftu: string("0xf5")\n\
	!u: string("0xd5")\n\
	Shiftv: string("0xf6")\n\
	!v: string("0xd6")\n\
	Shiftw: string("0xf7")\n\
	!w: string("0xd7")\n\
	Shiftx: string("0xf8")\n\
	!x: string("0xd8")\n\
	Shifty: string("0xf9")\n\
	!y: string("0xd9")\n\
	Shiftz: string("0xfa")\n\
	!z: string("0xda")\n\
	Shift[: string("0xfb")\n\
	![: string("0xdb")\n\
	Shift\\\\: string("0xfc")\n\
	!\\\\: string("0xdc")\n\
	Shift]: string("0xfd")\n\
	!]: string("0xdd")\n\
	Shift=: string("0xfe")\n\
	!=: string("0xde")\n\
	Shift3: string("0xdf")\n\
	Shift4: string("0xff")




    Дополнения

Да нет, никто не спорит, без xmodmapа не обойтись. Но эти два способа могут прекрасно уживаться вместе. Никто не мешает тебе русифицировать xterm и emacs независимо, а к переключению в русский регистр через Mode_switch прибегать только в крайних случаях. Надо только разные кнопки для этого дела завести. Клавиатура для редактора aXe - Resource-файл прилагается. На всякий случай - aXe это такой редактор, выглядит довольно похоже на xedit, но умеет гораздо больше. Его можно вытащить из ftp://ftp.x.org/contrib/editors/aXe-6.1.2.tar.Z ----------------------- CUT HERE: Axe.ad ----------------------------- *ed.translations: #override \n\ Execute: keymap(cyrillic) *ed.cyrillicKeymap.translations: #override \ Execute: keymap(None) \n\ Shift`: insert-string("0xe0")\n\ `: insert-string("0xc0")\n\ ShiftA: insert-string("0xe1")\n\ A: insert-string("0xc1")\n\ ShiftB: insert-string("0xe2")\n\ B: insert-string("0xc2")\n\ ShiftC: insert-string("0xe3")\n\ C: insert-string("0xc3")\n\ ShiftD: insert-string("0xe4")\n\ D: insert-string("0xc4")\n\ ShiftE: insert-string("0xe5")\n\ E: insert-string("0xc5")\n\ ShiftF: insert-string("0xe6")\n\ F: insert-string("0xc6")\n\ ShiftG: insert-string("0xe7")\n\ G: insert-string("0xc7")\n\ ShiftH: insert-string("0xe8")\n\ H: insert-string("0xc8")\n\ ShiftI: insert-string("0xe9")\n\ I: insert-string("0xc9")\n\ ShiftJ: insert-string("0xea")\n\ J: insert-string("0xca")\n\ ShiftK: insert-string("0xeb")\n\ K: insert-string("0xcb")\n\ ShiftL: insert-string("0xec")\n\ L: insert-string("0xcc")\n\ ShiftM: insert-string("0xed")\n\ M: insert-string("0xcd")\n\ ShiftN: insert-string("0xee")\n\ N: insert-string("0xce")\n\ ShiftO: insert-string("0xef")\n\ O: insert-string("0xcf")\n\ ShiftP: insert-string("0xf0")\n\ P: insert-string("0xd0")\n\ ShiftQ: insert-string("0xf1")\n\ Q: insert-string("0xd1")\n\ ShiftR: insert-string("0xf2")\n\ R: insert-string("0xd2")\n\ ShiftS: insert-string("0xf3")\n\ S: insert-string("0xd3")\n\ ShiftT: insert-string("0xf4")\n\ T: insert-string("0xd4")\n\ ShiftU: insert-string("0xf5")\n\ U: insert-string("0xd5")\n\ ShiftV: insert-string("0xf6")\n\ V: insert-string("0xd6")\n\ ShiftW: insert-string("0xf7")\n\ W: insert-string("0xd7")\n\ ShiftX: insert-string("0xf8")\n\ X: insert-string("0xd8")\n\ ShiftY: insert-string("0xf9")\n\ Y: insert-string("0xd9")\n\ ShiftZ: insert-string("0xfa")\n\ Z: insert-string("0xda")\n\ Shift[: insert-string("0xfb")\n\ [: insert-string("0xdb")\n\ Shift\\\\: insert-string("0xfc")\n\ \\\\: insert-string("0xdc")\n\ Shift]: insert-string("0xfd")\n\ ]: insert-string("0xdd")\n\ Shift=: insert-string("0xfe")\n\ =: insert-string("0xde")\n\ Shift3: insert-string("0xdf")\n\ Shift4: insert-string("0xff")

Популярность: 2, Last-modified: Mon, 09 Dec 1996 07:38:12 GmT