В XWindow пользователю предоставлена замечательная возможность вводить символы, отсутствующие на клавиатуре с помощью клавиши Compose. По умолчанию эта клавиша — правый Alt, но вы можете изменить её с помощью параметра «compose:» раздела Section “InputDevice” файла xorg.conf (или в Центре управления KDE - Региональные и специальные возможности - Раскладка клавиатуры - Параметры XKB). К сожалению, в русской раскладке ввод символов, использующих клавиши, которые выдают разные символы на разных раскладках, невозможен.
Попробуем исправить эту ситуацию для популярных в России символов типографики.
Для этого скачайте файл compose_append_ru.txt. Затем объедините с существующими правилами:
cat compose_append_ru.txt /usr/share/X11/locale/en_US.UTF-8/Compose >~/.XCompose
Перезапустите XWindow и можете вводить символы (вместо Compose удерживайте назначенную клавишу):
Символ | Клавиши | Альтернатива |
---|---|---|
© | o c | O C |
® | o r | O R |
» | > > | . . |
« | < < | , , |
“ | < ” | ” < |
” | > ” | ” > |
‰ | % o | |
€ | E = | = E |
€ | C = | = E |
£ | L - | - L |
¥ | Y = | = Y |
§ | s o | o s |
¤ | x o | o x |
¶ | P P | |
… | ; ; | |
° | o o |
Краткая инструкция на основе статьи «Типографская раскладка»:
Сохраните это в файл, например ~/ru_ua_xkb_config:
xkb_keymap "rusadv" { xkb_keycodes { include "xfree86" }; xkb_types { include "default" }; xkb_compatibility { include "default" include "xfree86" indicator "Scroll Lock" { modifiers= None; groups=All-group1; }; // Shift to the 3rd group interpret ISO_Last_Group_Lock { action = SetGroup(group=3); }; }; xkb_symbols { include "pc+us+ru(winkeys)" name[Group1] = "US/ASCII"; name[Group2] = "Russian"; name[Group3] = "Polygraphy symbols"; key <ESC> { [Escape] }; # 1st keyboard row key <TLDE> { [quoteleft, asciitilde], [Cyrillic_io, Cyrillic_IO], [acute, approxeq] }; key <AE01> { [1, exclam], [1, exclam], [onesuperior, onesuperior] }; key <AE02> { [2, at], [2, guillemotleft], [quotedbl, twosuperior] }; key <AE03> { [3, numbersign], [3, guillemotright], [numerosign, threesuperior] }; key <AE04> { [4, dollar], [4, semicolon], [section, section] }; key <AE05> { [5, percent], [5, percent], [0x01002030, 0x01002030] }; key <AE06> { [6, asciicircum], [6, colon] }; key <AE07> { [7, ampersand], [7, question], [questiondown, ampersand] }; key <AE08> { [8, asterisk] }; key <AE09> { [9, parenleft], [9, parenleft], [bracketleft, braceleft] }; key <AE10> { [0, parenright], [0, parenright], [bracketright, braceright] }; key <AE11> { [minus, underscore], [minus, underscore], [emdash, hyphen] }; key <AE12> { [equal, plus], [equal, plus], [notequal, plusminus] }; key <BKSL> { [backslash, bar], [backslash, slash] }; key <BKSP> { [BackSpace] }; ############################# # 2nd keyboard row key <TAB> { [Tab, ISO_Left_Tab] }; key <AD01> { [q, Q], [Cyrillic_shorti, Cyrillic_SHORTI], [q, onequarter] }; key <AD02> { [w, W], [Cyrillic_tse, Cyrillic_TSE] }; key <AD03> { [e, E], [Cyrillic_u, Cyrillic_U], [EuroSign, oneeighth] }; key <AD04> { [r, R], [Cyrillic_ka, Cyrillic_KA], [registered, R] }; key <AD05> { [t, T], [Cyrillic_ie, Cyrillic_IE], [trademark, onethird] }; key <AD06> { [y, Y], [Cyrillic_en, Cyrillic_EN] }; key <AD07> { [u, U], [Cyrillic_ghe, Cyrillic_GHE], [Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN] }; key <AD08> { [i, I], [Cyrillic_sha, Cyrillic_SHA] }; //todo key <AD09> { [o, O], [Cyrillic_shcha, Cyrillic_SHCHA], [masculine, O] }; key <AD10> { [p, P], [Cyrillic_ze, Cyrillic_ZE], [acute, doubleacute] }; key <AD11> { [bracketleft, braceleft], [Cyrillic_ha, Cyrillic_HA] }; key <AD12> { [bracketright, braceright], [Cyrillic_hardsign, Cyrillic_HARDSIGN], [Ukrainian_yi, Ukrainian_YI] }; ############################# # 3rd keyboard row key <AC01> { [a, A], [Cyrillic_ef, Cyrillic_EF], [0x1000301, A] }; key <AC02> { [s, S], [Cyrillic_yeru, Cyrillic_YERU], [Ukrainian_i, Ukrainian_I] }; key <AC03> { [d, D], [Cyrillic_ve, Cyrillic_VE], [degree, D] }; key <AC04> { [f, F], [Cyrillic_a, Cyrillic_A], [sterling, F] }; key <AC05> { [g, G], [Cyrillic_pe, Cyrillic_PE] }; key <AC06> { [h, H], [Cyrillic_er, Cyrillic_ER], [h, onehalf] }; key <AC07> { [j, J], [Cyrillic_o, Cyrillic_O], [doublelowquotemark, J] }; key <AC08> { [k, K], [Cyrillic_el, Cyrillic_EL], [leftdoublequotemark, leftsinglequotemark] }; key <AC09> { [l, L], [Cyrillic_de, Cyrillic_DE], [rightdoublequotemark, rightsinglequotemark] }; key <AC10> { [semicolon, colon], [Cyrillic_zhe, Cyrillic_ZHE], [leftsinglequotemark, rightsinglequotemark] }; //todo key <AC11> { [quoteright, quotedbl], [Cyrillic_e, Cyrillic_E], [Ukrainian_ie, Ukrainian_IE] }; key <RTRN> { [Return] }; ############################# # 4th keyboard row key <AB01> { [z, Z], [Cyrillic_ya, Cyrillic_YA] }; key <AB02> { [x, X], [Cyrillic_che, Cyrillic_CHE], [multiply, 0x010022C5] }; key <AB03> { [c, C], [Cyrillic_es, Cyrillic_ES], [copyright, seconds] }; key <AB04> { [v, V], [Cyrillic_em, Cyrillic_EM], [minutes, minutes] }; key <AB05> { [b, B], [Cyrillic_i, Cyrillic_I] }; key <AB06> { [n, N], [Cyrillic_te, Cyrillic_TE] }; key <AB07> { [m, M], [Cyrillic_softsign, Cyrillic_SOFTSIGN] }; key <AB08> { [comma, less], [Cyrillic_be, Cyrillic_BE], [guillemotleft, doublelowquotemark] }; key <AB09> { [period, greater], [Cyrillic_yu, Cyrillic_YU], [guillemotright, rightdoublequotemark] }; key <AB10> { [slash, question], [period, comma], [ellipsis, question] }; ############################# # the last keyboard row key <SPCE> { [space, space], [space, space], [nobreakspace, nobreakspace] }; ############################# # arrows keys key <LEFT> { [Left], [Left], [0x1002190, 0x10021D0] }; key <UP> { [Up], [Up], [0x1002191, 0x10021D1] }; key <RGHT> { [Right], [Right], [0x1002192, 0x10021D2] }; key <DOWN> { [Down], [Down], [0x1002193, 0x10021D3] }; // Switches: // LShift+RShift, Ctrl+Shift - permanent switch between en and ru(winkeys) // unlike the xorg.conf setting, this one doesnt prevent ctrl+shift+z etc // RAlt - temporary switch to 3rd group key <RTSH> { [Shift_R, ISO_Next_Group], [Shift_R, ISO_Prev_Group] }; key <LFSH> { [Shift_L, ISO_Next_Group], [Shift_L, ISO_Prev_Group] }; key <RALT> { [ISO_Last_Group_Lock, ISO_Last_Group_Lock], [ISO_Group_Shift, ISO_Group_Shift] }; key <LCTL> { [Control_L, ISO_Next_Group], [Control_L, ISO_Prev_Group] }; key <RCTL> { [Control_R, ISO_Next_Group], [Control_R, ISO_Prev_Group] }; // Some impovements // map CapsLock to LCtrl // key <CAPS> { // [Control_L] // }; }; xkb_geometry { include "pc(pc105)" }; }; // /usr/bin/xkbcomp /path/to/your/home/dir/.xkb_config $DISPLAY
Затем сделайте чтобы при каждой загрузке компьютера выполнялась команда
/usr/bin/xkbcomp /home/<ИМЯ ПОЛЬЗОВАТЕЛЯ>/ru_ua_xkb_config $DISPLAY
Например, можно эту строку поместить в файл ~/xkbcomp.sh, выполните команду chmod a+x ~/xkbcomp,sh в домашней папке (~), затем в папке ~/.kde/Autostart создайте ссылку на приложение (контекстное меню в konqueror), введя в качестве команды ~/xkbcomp.sh. Это приведёт к созданию такого файла (у меня он называется xkbcomp.desktop):
[Desktop Entry] Comment= Comment[en_US]= Encoding=UTF-8 Exec='/home/xx/xkbcomp.sh' GenericName= GenericName[en_US]= Icon=exec MimeType= Name= Name[en_US]= Path= StartupNotify=true Terminal=false TerminalOptions= Type=Application X-DCOP-ServiceType= X-KDE-SubstituteUID=false X-KDE-Username=
После этого раскладка будет переключаться по ctrl+shift, комбинации клавиш наподобие ctrl+shift+z _будут_ работать, на shift+2, shift+3 будут соответственно « и » (очень помогает если вы привыкли пользоваться «программистскими» ““), другие символы доступны при нажатии правого alt.