Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Dead keys в Линуксе

Автор Akemdwr, июля 28, 2014, 14:24

0 Пользователи и 1 гость просматривают эту тему.

Akemdwr

Прошу помочь советом.
Уже много лет как пользуюсь собственным, сделанным с нуля под себя комплектом клавиатурных раскладок (дореволюционный русский, латынь, древнегреческий), как в Виндоуз, так и на Андроиде.
Сейчас есть желание перейти на Линукс и само собой главный вопрос — как портировать туда свои раскладки. С русским и латинским разобрался, а вот с греческим проблема — меня не устраивают встроенные в Линукс мертвые клавиши. Например не устраивает то что надо набирать тремя нажатиями, а не двумя, ну и многое другое.
Поэтому вопрос — возможно как-то в Линуксе отредактировать набор мертвых клавиш?

P. S. Предваряя почти неизбежный встречный вопрос, сразу скажу — я музыкант и у меня не бывает ни офиса, ни рабочего компьютера, за чужим компьютером мне пришлось сидеть за последние три года — два раза по 5 минут, так что да — меня вполне устраивает, что мои раскладки, в которых я печатаю вслепую, не имеют вообще ничего общего со стандартным qwerty/йцукен  :)
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

Toman

Цитата: Akemdwr от июля 28, 2014, 14:24
меня не устраивают встроенные в Линукс мертвые клавиши. Например не устраивает то что ἄ надо набирать тремя нажатиями, а не двумя, ну и многое другое
В ядро Линукс никаких конкретных раскладок не встроено. Вам нужно создать свои (или модифицировать имеющиеся - разумеется, забэкапив существующее состояние на всякий случай в отдельных файлах) составные части раскладок в соответствующих конфигурационных файлах для иксов, точнее, для клавиатуры в иксах. Живут они в /usr/share/X11/xkb
Я не спец в их устройстве, так что подсказать пока не могу, хотя когда-то давно что-то с ними делал, м.б. и теперь соберусь таки попробовать сделать свою раскладку (т.е. фактически просто добавить букв и символов, которых особенно не хватает чаще всего), придётся разбираться заново - тем более, что сейчас устройство этих файлов не такое, как было 15 лет назад.
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Akemdwr

Сами раскладки в /usr/share/X11/xkb я создал уже, все получилось, но именно dead keys прописываются насколько я понял где-то в другом месте.
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

wandrien

Не помню, где есть подробная документация, но, имхо, содержимое /usr/share/X11/xkb/symbols довольно самоочевидно. Можно взять файл с похожей раскладкой и переделать по образцу.

Вот немного документации: http://pascal.tsu.ru/en/xkb/internals.html

Ыняша

Мой номер на ЛФ #43854 — ура, я чётник! Чётники лучше нечётников.
С точностью до полпроцента в нановеке — пи секунд.

Timiriliyev

Я бы подсказал, но, к сожалению, забыл о том, где они, а компьютера под рукой нет. :green:

Могу лишь посоветовать погуглить "xcompose".

В домашней директории можно создать файл .XCompose и задать там свои последовательности клавиш (работать они будут, естественно, только с одного пользователя).

И ещё. В Линуксе я не нашёл способа создать собственные deadkey, смог только назначить новые значения на уже существующие. :donno: Искал плохо, видимо.
Правда — это то, что правда для Вас.

Ыняша

Цитата: Timiriliyev от июля 28, 2014, 15:11
И ещё. В Линуксе я не нашёл способа создать собственные deadkey, смог только назначить новые значения на уже существующие. :donno: Искал плохо, видимо.

Говорят, нельзя их просто добавить, легче переназначить существующие: «When you want to add a new keysym, you need to add it to keysymdef.h and recompile Xorg. It's a daunting task and the common workaround is to reuse existing keysyms in inventive ways.»
Мой номер на ЛФ #43854 — ура, я чётник! Чётники лучше нечётников.
С точностью до полпроцента в нановеке — пи секунд.

wandrien

xcompose это немного другая фича, но годится, да.

Я про вот что хотел сказать. Вы можете настроить в раскладке "третий уровень" и включать его дополнительным модификатором (т.е. у вас появлятся "второй shift, но не shift").
Смотрите, например, блок latlevel3 в раскладке rs.

level 3 у меня назначен на правый ALT. Когда я будучи в сербской раскладке, держу зажатым правый ALT, с клавиатуры вводятся символы, указанные в таблице latlevel3. Например правый ALT + a = æ.

Вообще настройки клавиатуры у меня задаются такой командой:
setxkbmap -model pc104 -layout 'us(basic),ru:2,rs(latinyz):3' -option '' -option lv3:ralt_switch,grp:shift_caps_switch,grp_led:caps,compose:menu

wandrien

Цитата: Timiriliyev от июля 28, 2014, 15:11
И ещё. В Линуксе я не нашёл способа создать собственные deadkey, смог только назначить новые значения на уже существующие. :donno: Искал плохо, видимо.
Вы про эти?

  key <AE01> {   [ any,any,     dead_tilde,          asciitilde  ]   }; // 1 !
  key <AE02> {   [ any,any,     dead_caron,          caron       ]   }; // 2 @
  key <AE03> {   [ any,any,     dead_circumflex,     asciicircum ]   }; // 3 #
  key <AE04> {   [ any,any,     dead_breve,          breve       ]   }; // 4 $
  key <AE05> {   [ any,any,     dead_abovering,      degree      ]   }; // 5 %
  key <AE06> {   [ any,any,     dead_ogonek,         ogonek      ]   }; // 6 ^
  key <AE07> {   [ any,any,     dead_grave,          grave       ]   }; // 7 &
  key <AE08> {   [ any,any,     dead_abovedot,       abovedot    ]   }; // 8 *
  key <AE09> {   [ any,any,     dead_acute,          apostrophe  ]   }; // 9 (
  key <AE10> {   [ any,any,     dead_doubleacute,    doubleacute ]   }; // 0 )
  key <AE11> {   [ any,any,     dead_diaeresis,      diaeresis   ]   }; // - _
  key <AE12> {   [ any,any,     dead_cedilla,        cedilla     ]   }; // = +


А зачем создавать новые? Вроде всё есть. Назначить можно на любые кнопки.

Akemdwr

.XCompose по ходу работает только с Multi_key, просто с мертвыми клавишами — не получается, а набирать через Multi_key символы, встречающиеся в каждом слове, еще и не по разу — не вариант.
То что нельзя добавить, а можно только переназначить, меня устраивает, но...
Во-первых нашел в /usr/share/X11/locale назначения для греческих мертвых клавиш сразу в двух местах: ~/en_US.UTF-8/Compose и ~/el_GR.UTF-8/Compose, непонятно, какой файл используется. Ну это ладно, попробовал внести изменения и туда и туда, вместо:
<dead_acute> <Greek_alpha>          : "ά"   U03D7 # GREEK SMALL LETTER ALPHA WITH TONOS
сдѣлалъ:
<dead_acute> <Greek_alpha>          : "Ϋ"   U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (просто для пробы) —
и абсолютно ничего не поменялось!
Пробовал и перегружаться несколько раз, и кэш раскладок чистить в /var/lib/xkb/*.xkm — никакой реакции, все равно работает то назначение, которого уже нет!
Может эти файлы Compose еще куда-то кэшируются, но куда?...
Я в полном недоумении...
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

Akemdwr

wandrien, эти, но мне их надо переназначить, например чтобы одна мертвая клавиша + α давала сразу ἄ (сейчас для этого надо три клавиши нажать). Короче задача создать в линуксе именно такую раскладку, какую создал в винде.
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

Ыняша

Цитата: wandrien от июля 28, 2014, 15:22
Вы можете настроить в раскладке "третий уровень" и включать его дополнительным модификатором (т.е. у вас появлятся "второй shift, но не shift").

Тогда man xmodmap, там можно третий и четвёртый уровни замапить.

Цитата: Akemdwr от июля 28, 2014, 17:09
Во-первых нашел в /usr/share/X11/locale назначения для греческих мертвых клавиш сразу в двух местах: ~/en_US.UTF-8/Compose и ~/el_GR.UTF-8/Compose, непонятно, какой файл используется.

Для пользовательских настроек используется ~/.XCompose (его можно создать), где ~ означает домашнюю директорию пользователя.

Файлы в /usr/.../locale являются дефолтными для соотвествующих локалей. Обычно они include'ятся в ~/.XCompose первой строчкой.

Изменения вступают в силу во всех открытых после изменения программах.

Так же желательно проверить что dead_acute действительно замаплен на какую-нибудь кнопку. Маппингом занимается xmodmap.

В некоторых дистрибутивах xcompose может ломаться различными IME. Например, в убунте по-дефолту стоит ibus, который не совместим с композом. Можно заменить на uim, либо пользоваться средствами IME для ввода нестандартных символов.
Мой номер на ЛФ #43854 — ура, я чётник! Чётники лучше нечётников.
С точностью до полпроцента в нановеке — пи секунд.

Akemdwr

.XCompose не подходит — уже писал почему.
«Изменения вступают в силу во всех открытых после изменения программах.»
— это понятно, но я даже в /usr/.../locale поменял в обоих местах где dead_acute встречается, и ничего не поменялось.
То что dead_acute замаплен — это точно.
Я все же подозреваю, что файлы Compose куда-то кэшируются, вот тут об этом тоже пишут: http://forum.giga.ua/viewtopic.php?t=3232&p=761587
но таких папок, что там упоминаются в моей кубунте нету.
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

Ыняша

По идее должен и с dead_клавишами работать, но я использовал только Multi_key, поэтому не скажу в чём проблема.

Цитата: Akemdwr от июля 28, 2014, 17:35
Я все же подозреваю, что файлы Compose куда-то кэшируются, вот тут об этом тоже пишут:

ман говорит об этом:
/var/cache/libx11/compose/
System-wide cache directory for compiled compose files.

$HOME/.compose-cache/
Per-user cache directory for compiled compose files.

Попробуй тогда поискать статьи о создании раскладки с xmodmap.-
Мой номер на ЛФ #43854 — ура, я чётник! Чётники лучше нечётников.
С точностью до полпроцента в нановеке — пи секунд.

wandrien

Цитата: Akemdwr от июля 28, 2014, 17:12
wandrien, эти, но мне их надо переназначить, например чтобы одна мертвая клавиша + α давала сразу ἄ (сейчас для этого надо три клавиши нажать). Короче задача создать в линуксе именно такую раскладку, какую создал в винде.
Там две диакритики? Вот именно так сделать вряд ли получится штатными средствами.
Возможно удастся скомбинировать dead key + клавиша с буквой, которой уже присвоенна одна диакритика -> даст в итоге символ с двумя диакритиками за два нажатия. (Не проверял.)
Но вот именно в сам deadkey вложить две диакритики не получится. Система обработки ввода тупо запоминает, что была нажата диакритика, а потом комбинирует её со следующим символом. Настраиваемой логики там нет.

Выход - использовать внешний метод ввод вместо встроенного. scim, uim или ibus. Возможно, один из них имеет требуемый уровень гибкости. (Ни с одним лично не имел дела.)

Тайльнемер

Может, вам чем-то поможет вот эта тема бывшего ЛФ-чанина Кваса на «Улье»...

Python

Цитата: wandrien от июля 28, 2014, 15:24
А зачем создавать новые? Вроде всё есть. Назначить можно на любые кнопки.
Ну, например, мы хотим, чтобы мертвый акут и кириллические а, е, и, і, о, у, к, г давали á, é, ú, í, ó, ý, ќ, ѓ. Подобных удобств в линуксовых дедкеях изначально нет, ибо 1) славянам удобства ненужны и 2) извращение. В принципе, в мертвоклавишный механизм можно добавить любые превращения (напр., создать мертвую клавишу, превращающую кириллические буквы в греческие или глаголичные).
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Akemdwr

Я вот вычитал, что возможно дело в методе ввода, что мне нужен X input,а у меня ibus, или еще что-то. Я пока не вкурил, что вообще такое метод ввода, и зачем их так много, но вернусь домой, попробую еще этот вариант.
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

wandrien

Цитата: Akemdwr от июля 28, 2014, 19:23
Я пока не вкурил, что вообще такое метод ввода, и зачем их так много, но вернусь домой, попробую еще этот вариант.
В Иксах с начала был встроен очень примитивный. Потом его доработали, сделали не очень примитивным (собственно, xkb). Но для языков типа китайского он всё равно не пригоден. Поэтому придумали, как механизм превращения нажатий в символы дополнять сторонними модулями.

Если у вас установлен gnome3, там наверняка уже есть ibus.

В винде внутрях так же сделано, там обработка ввода расширяется дополнительными модулями для китайского, японского и т.п.

Akemdwr

wandrien, там две диакритики, но в результате должен оказаться один символ — лигатура.
В локальном Compose прописана куча сочетаний типа:
dead... + x = y
логика подсказывает, что можно взять какую-то dead_doubleacute, которая по умолчанию в греч. не используется и написать, чтоб она + альфа давала юникодный символ, отвечающий за альфу с двумя диакритиками
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

Toman

Цитата: wandrien от июля 28, 2014, 15:24
А зачем создавать новые? Вроде всё есть. Назначить можно на любые кнопки.
Ну, можно ведь предположить, что кому-то понадобится/захочется больше, чем их там есть.

Цитата: Akemdwr от июля 28, 2014, 17:09
Может эти файлы Compose еще куда-то кэшируются, но куда?...
Я в полном недоумении...
Цитата: Ыняша от июля 28, 2014, 17:27
В некоторых дистрибутивах xcompose может ломаться различными IME. Например, в убунте по-дефолту стоит ibus, который не совместим с композом. Можно заменить на uim, либо пользоваться средствами IME для ввода нестандартных символов.
А собственно команда программам (в т.ч. GTKшным и QTшным) использовать соответствующий xcompose файлам метод ввода xim была дана? А для этого нужно поставить одну из соответствующих переменных окружения - либо вручную перед каждым запуском соотв. программы, либо, в норме, это делают через файлы в /etc/X11/xinit/xinput.d , имя файла или линка на собственно файл соответствует имени локали или all_ALL, если для всех локалей. У меня вот в системе по умолчанию никакой IM вообще не указан там, т.е. чтобы, например, xim заработал, это надо указать явно. М.б. в графических средах есть какие-нибудь штатные средства выбрать IM - помнится, оно там регулярно мелькало, только не помню, какие именно варианты предлагались на выбор. Ну да, сейчас посмотрел - в убунте имеется штатный Input Method Switcher для выбора пользователем собственного метода для его текущей локали. Предлагаются там, кроме "никакого" (выбранного у меня сейчас) или "по умолчанию", а также всяких тайских-GTK, xim или ibus...

P.S. Пользовательский выбор IM живёт в ~/.xinput.d/соотв_ЛОКАЛЬ
Во́зле до́ма хо́лм с куля́ми - вы́йду на́ холм, ку́ль поставлю.
В славном городе Miami тётки мерялись ногтями, тик иң озын завсегда у Фиделя борода!

Akemdwr

Да! Оказалось, проблема была именно в этом — именно в IME, с помощью утилитки im-switch поменял IME на XIM и все заработало!
Я просто в Линуксе пока полный чайник и для меня было новостью, что там существуют различные методы ввода. Собственно говоря вопрос с раскладками был для меня определяющим, если бы создать нужные раскладки не удалось, пришлось бы отказаться от идеи перехода на Линукс.
Зато теперь все супер, с XIM .XCompose может оказывается абсолютно все, не только существующие dead_keys можно переназначить, но и вообще любой символ юникода можно назначить мертвой клавишей и задать ему любое количество сочетаний!
Всем большое спасибо за помощь и поддержку!!! :)
Γνῶθι σεαυτόν
Мой никъ читается — Ἀκέμδωρ
Склоняется — γεν. Ἀκέμδορος, δοτ. Ἀκέμδορι, αἰτ. Ἀκέμδορα, κλ. Ἄκεμδορ.

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр