Ввод нестандартных символов

Ввод символов с помощью клавиши Compose

В 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.

Другой подход к модификации раскладки

 
article/compose.txt · Последние изменения: 16.01.2008 01:19
 
GNU Free Documentation License Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS