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