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")




    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")