LINUX.ORG.RU

Как добавить символов в раскладку?

 ,


4

3

Здравствуйте.
Подскажите, кто-нибудь знает как добавить в раскладку символов?
Например, я не хочу иметь украинскую раскладку, но хочу иметь символы Ї, ї.
Хочется сделать как-то типа чтобы win+и выдавало ї, а shift+win+и выдавало Ї.

OS Linux mint.



Последнее исправление: Piter_prbg (всего исправлений: 1)

ruu, там і ї є на третьем уровне

lazyklimm ★★★★★
()

Если хочется что-то своё, могу вечерком, как дома буду, скинуть пример полностью кастомной кириллической раскладки.

lazyklimm ★★★★★
()

Вот это кладётся в ~/.xkb/symbols/rup (непринципиально, см команду ниже). Тут раскладка совсем не стандартная, редкоиспользуемые символы русского + украинский/белорусский на третьем уровне, но зато пунктуация совпадает с английской.

partial alphanumeric_keys
xkb_symbols "rup" {
 include "us(basic)"
 include "typo(base)"
 name[Group1]= "Russian (with Ukrainian-Belorussian symbols and us punctuation)";
 key <TLDE> { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol
 key <AD01> { [ Cyrillic_ha, Cyrillic_HA, Ukrainian_yi, Ukrainian_YI ] };
 key <AD02> { [ Cyrillic_be, Cyrillic_BE ] };
 key <AD03> { [ Cyrillic_u, Cyrillic_U, Cyrillic_yu, Cyrillic_YU ] };
 key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered ] };
 key <AD05> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_e, Cyrillic_E ] };
 key <AD06> { [ Cyrillic_en, Cyrillic_EN ] };
 key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE, Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN] };
 key <AD08> { [ Cyrillic_sha, Cyrillic_SHA, Cyrillic_shcha, Cyrillic_SHCHA ] };
 key <AD09> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
 key <AD10> { [ Cyrillic_ze, Cyrillic_ZE, Ukrainian_ie, Ukrainian_IE ] };
 key <AC01> { [ Cyrillic_ef, Cyrillic_EF] };
 key <AC02> { [ Cyrillic_yeru, Cyrillic_YERU, Ukrainian_i, Ukrainian_I ] };
 key <AC03> { [ Cyrillic_ve, Cyrillic_VE, Byelorussian_shortu, Byelorussian_SHORTU ] };
 key <AC04> { [ Cyrillic_a, Cyrillic_A ] };
 key <AC05> { [ Cyrillic_pe, Cyrillic_PE ] };
 key <AC06> { [ Cyrillic_er, Cyrillic_ER ] }; 
 key <AC07> { [ Cyrillic_o, Cyrillic_O, Cyrillic_io, Cyrillic_IO ] };
 key <AC08> { [ Cyrillic_el, Cyrillic_EL ] };
 key <AC09> { [ Cyrillic_de, Cyrillic_DE ] };

 key <AB01> { [ Cyrillic_ya, Cyrillic_YA ] };
 key <AB02> { [ Cyrillic_che, Cyrillic_CHE, Cyrillic_tse, Cyrillic_TSE ] };
 key <AB03> { [ Cyrillic_es, Cyrillic_ES ] };
 key <AB04> { [ Cyrillic_em, Cyrillic_EM ] };
 key <AB05> { [ Cyrillic_i, Cyrillic_I, Cyrillic_shorti, Cyrillic_SHORTI ] };
 key <AB06> { [ Cyrillic_te, Cyrillic_TE, numerosign ] };
 key <AB07> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
};

и запускается так

#сбросим текущие настройки
setxkbmap us -option
# английская + типографские символы/кастомная раскладка выше
# чтобы в системные каталоги не лезть, приходится в ручную через xkbcomp собирать
setxkbmap us+typo,rup -option "ctrl:nocaps,shift:both_capslock,grp:toggle,nbsp:level4"  -print | xkbcomp -I"$HOME/.xkb" - "$DISPLAY"
lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Спасибо, lazyklimm !

Да, хотелось бы свою собрать, украинский я просто для примера написал.

Не могу понять только, как тут обозначается третий (или выше) уровень?
Не понимаю, что вот такая запись значит:

key <AD01> { [ Cyrillic_ha, Cyrillic_HA, Ukrainian_yi, Ukrainian_YI ] };

Типа, на клавишу назначено четыре уровня или что?

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

обычное нажатие, с шифтом, третий уровень (по дефолту модифицируется с помощью AltGr, но можно выставить что угодно), третий + шифт (сначала нажимается модификатор третьего уровня, потом шифт, потом сопсна буквенная клавиша)

lazyklimm ★★★★★
()
Последнее исправление: lazyklimm (всего исправлений: 1)
Ответ на: комментарий от Piter_prbg

Если интересует более подробное устройство, рекомендую полазить по каталогу

/usr/share/X11/xkb/ (в нём содержатся все возможные по дефолту раскладки, дополнительные символы итп)

а так же покурить вывод команды

 xkbcomp $DISPLAY -

- это выдаст текущие настройки клавиатуры в виде настроек самого нижнего уровня

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

так. чё-то не пойму.. а как понять файл текущей раскладки?
Я меняю в гуёвых настройках клавиатуры например клавишу третьего уровня, но файл например /usr/share/X11/xkb/symbols/us не изменяется.

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

так. чё-то не пойму.. а как понять файл текущей раскладки?

в общем случае никак, ну т.е. ты можешь вручную подправить файлы в /usr/share/X11/xkb, но так делать неправильно (как минимум потому, что будет нарушена работа пакетного менеджера + при обновлении один фиг оно перезапишется).

То что ты меняешь в гуёвых настройках - отражается только на текущем пользователе, я не знаю точно, как это реализовано в mint, но в общем случае это просто меняет параметры вызова setxkbmap. Я думаю, что тебе стоит отслеживать вывод

xkbcomp $DISPLAY -

Можешь посмотреть файл /usr/share/X11/xkb/rules/base.lst, там в обычном текстовом виде описаны все возможные _стандартные_ настройки раскладок, модификаторов и всего такого.

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Так. Скопировал для начала твой пример себе.
Потом в гуёвых настройках выставил клавишу 3 уровня левый windows.
Делаю твою команду

[br]setxkbmap us+typo,rup -option "ctrl:nocaps,shift:both_capslock,grp:toggle,nbsp:level4"  -print | xkbcomp -I"$HOME/.xkb" - "$DISPLAY"[br]

затем смотрю
xkbcomp $DISPLAY - | grep level3
говорит:
[br]xkb_symbols "pc+us+typo+rup:2+inet(evdev)+group(toggle)+group(alt_shift_toggle)+level3(lwin_switch)+ctrl(nocaps)+compose(rctrl)+nbsp(level4)+shift(both_capslock)" {[br]

то есть вроде клавиша должна работать
но win+q не даёт Ukrainian_yi
что не так?

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

win+q не даёт Ukrainian_yi

а если сначала переключить на русскую раскладку?

lazyklimm ★★★★★
()
Ответ на: комментарий от Piter_prbg

помимо этого, я не в курсе, как всё устроено в GUI, но есть мысль, что мешать setxkbmap и гуёвые настройки не очень правильно

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

во, из base.lst

 lv3:lwin_switch      Left Win

т.е. тебе нужно выполнить что-то вроде (не проверял)

setxbmap us -option ; setxkbmap us+typo,rup -option "lv3:lwin_switch,grp:alt_shift_toggle"  -print | xkbcomp -I"$HOME/.xkb" - "$DISPLAY"
lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

и гуёвая переключалка не покрешилась, всё переключается.
Большое спасибо! пойду свою раскладку настраивать )

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

Ну вот, теперь можешь по моему шаблону (ну или по стандартным файлам настроек) переправить символы под себя :)

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

а как настроить, чтобы на двух-трёх раскладках были свои настройки символов, а не только на русской?

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

вкратце:

setxkbmap раскладка1,раскладка2,раскладка3

где раскладка1,2,3 - имена файлов в тех путях, про которые знает xkb

lazyklimm ★★★★★
()
Ответ на: комментарий от Piter_prbg

Ukrainian_yi
xkb_symbols «pc+us+typo+rup:2+inet(evdev)+group(toggle)+group(alt_shift_toggle)+level3(lwin_switch)+ctrl(nocaps)+compose(rctrl)+nbsp(level4)+shift(both_capslock)»

Нафиг этот секс :)?

http://dreamject.org/dreamjects/unilayouts/

Тут есть мои раскладки (для линя версия почти без ограничений), после установки всё настраивается в гуе. Раскладку можно подделать под себя, большая коллекция символов уже добавлена

Вместо Ukrainian_yi проще использовать юникодоконвертер (в вид U1234).

Сис файлы, правда, меняются (раскладки дополняются), но пока ничего после установки перезаписано не было. А если и будет — инсталлятор быстрый

Dreamject
()
Последнее исправление: Dreamject (всего исправлений: 2)
Ответ на: комментарий от Dreamject

аа, я просто не понял, что искать.

Ну, в момент добавления раскладки русской оптимизированной, у меня апплет гу’вой переключалки исчез, и

[br]Error activating XKB configuration.[br]There can be various reasons for that.[br][br]If you report this situation as a bug, include the results of[br] • xprop -root | grep XKB[br] • gsettings get org.gnome.libgnomekbd.keyboard model[br] • gsettings get org.gnome.libgnomekbd.keyboard layouts[br] • gsettings get org.gnome.libgnomekbd.keyboard options[br]

Piter_prbg
() автор топика
Ответ на: комментарий от Dreamject

Вместо Ukrainian_yi проще использовать юникодоконвертер (в вид U1234).

чем проще? нифига ж не видно, что за символ.

Сис файлы, правда, меняются (раскладки дополняются), но пока ничего после установки перезаписано не было. А если и будет — инсталлятор быстрый

быстро превратит ваш линукс в слаку

lazyklimm ★★★★★
()
Ответ на: комментарий от Piter_prbg

символы не настраиваются, всё захардкодено

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Слабо представляю, если честно, где добывать эти «буква_йо». Для юникода есть конвертеры, а тут по одной буковке вытаскивать, тем более когда будут явно юникодские символы использоваться — нафиг.

быстро превратит ваш линукс в слаку

Хз. Но в одном случае мистическая возможность не сломаться, а удалиться при неведомом обновлении файлов раскладок, в другом — какой-то консольный костыль, который должен поломаться, если его гуем задеть.

Да, ещё вспомнил: у Дениса Попова, например, есть раскладки «Рукби», вроде. Она добавляет «язык», не /русский/раскладка, а /2русский/раскладка. Система таких языков не знает, и вместо индикаторов раскладок может показать пустое место или ещё что-то необычное. Не помню, правда, относится к ли к этому твой вариант

Dreamject
()
Ответ на: комментарий от Dreamject

Слабо представляю, если честно, где добывать эти «буква_йо»

Лол, там банальная стандартная транслитерация, если знаешь, как буквы называются - всё элементарно. Плюс, если ты откроешь в соседнем окошке /usr/share/X11/xkb/symbols/ru (например, кстати, обрати внимание, что там используется именно буквенное описание), то вообще всё в шоколаде. И никаких левых юникодоконвертеров.

Но в одном случае мистическая возможность не сломаться, а удалиться при неведомом обновлении файлов раскладок

Почему при неведомом? Любое обновление/переустановка пакета xkb-data перезапишет твои изменения нафиг. Плюс пакетный менеджер будет считать, что база чексум битая.

какой-то консольный костыль

стандартная программа из поставки иксов, например, костыли - это гуёвые переключалки (которые, зачастую, тот же setxkbmap и используют).

должен поломаться, если его гуем задеть.

Почему сразу должен? Просто я не знаю внутреннего устройства всех возможных индикаторов раскладок, потому не могу гарантировать беспроблемную работу.

Собственно, никто не мешает закосить под ru(например), не портя системных файлов, тот же xkbcomp сначала зачитывает каталог, который указан под флагом -I, потому системная ru просто будет проигнорирована. Просто мне оно нафиг не нужно, потому использую так.

lazyklimm ★★★★★
()
Последнее исправление: lazyklimm (всего исправлений: 2)
Ответ на: комментарий от Dreamject

Кстати, ещё один нюанс, ТС-у нужна была не готовая раскладка (у всех свои потребности в наборе), а возможность кастомизировать под себя.

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Лол, там банальная стандартная транслитерация, если знаешь, как буквы называются - всё элементарно.

Tranclit — wtuka neodnozna4na`a, ). Да и прописівать каждую букву ~10 буквами не очень охота

Собственно, никто не мешает закосить под ru(например), не портя системных файлов, тот же xkbcomp сначала зачитывает каталог, который указан под флагом -I, потому системная ru просто будет проигнорирована. Просто мне оно нафиг не нужно, потому использую так.

Тогда по-правильному надо будет ещё в свой конфиг скопировать все раскладки файла того языка...

Кстати, ещё один нюанс, ТС-у нужна была не готовая раскладка (у всех свои потребности в наборе), а возможность кастомизировать под себя.

Проще пропатчить инсталляционные файлы, чем создавать всё ручками, делать бэкапы и т.д.

Dreamject
()
Ответ на: комментарий от Dreamject

Tranclit — wtuka neodnozna4na`a

в xkb - однозначная

Да и прописівать каждую букву ~10 буквами не очень охота

лол, значит переключаться на окно со справкой по юникоду) на каждый чих - это нормально? Плюс в таком случае ты не видишь, что за символ.

Тогда по-правильному надо будет ещё в свой конфиг скопировать все раскладки файла того языка...

зачем? у меня полная раскладка описывается, мне больше ничего не надо.

Проще пропатчить инсталляционные файлы, чем создавать всё ручками, делать бэкапы и т.д.

Тогда уже проще всего пропатчить готовые системные файлы(которые, возвращаясь к, в отличие от твоих, читабельны) и тупо хранить дифф.

lazyklimm ★★★★★
()
Ответ на: комментарий от Dreamject

В общем, я ничего не имею против твоей раскладки, каждый веселится как хочет, но пойми, что ты далеко не первый и не последний. Вот если бы ты сделал графическую редактировалку символов (раньше что-то такое делал JWZ, но оно через xmodmap и deprecated) - тогда была бы уважуха, да. А так - для среднестатистического пользователя оно ничем не лучше того, что было для тебя.

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Вот если бы ты сделал графическую редактировалку символов (раньше что-то такое делал JWZ, но оно через xmodmap и deprecated) - тогда была бы уважуха, да.

Я делал с экселевской таблицей + какой-то популярный преобразователь юникода, настроенный под свои нужды. На входе

типа цЦ↑✔

уУ€★

На выходе юникодовая текстовая таблица, которая идёт в калс, а оттуда в текст преобразовывается. МОжет громоздко, но если надо >10 раскладок создать, нормально.

лол, значит переключаться на окно со справкой по юникоду) на каждый чих - это нормально? Плюс в таком случае ты не видишь, что за символ.

Есть ж визуальные на два столбца типа гуглтранслейта. Твоё дело просто напихать... Но это в дев. версии, а не той, которая там выложена)

Dreamject
()
Ответ на: комментарий от Dreamject

Я делал с экселевской таблицей + какой-то популярный преобразователь юникода, настроенный под свои нужды.

Слушай, нескромный вопрос, а что ты в линуксе вообще делаешь с таким подходом? Ну это ж ппц как неоптимально. Эксель + ещё что-то (кстати, почему тогда для экселя макрос не написать?).

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Куда уж более графически, когда тебе надо всего лишь 4 символа ввести на кнопку, которые ты видишь, причем без лишних кликов мыши, ничего не теряется.

Dreamject
()
Ответ на: комментарий от Dreamject

Раскладка со спецсимволами(опять же, в линуксе искаропки есть typo и ruu, для тех, кому действительно надо, да и XCompose никто не отменял, там спецсимволов сильно больше, чем может покрыть любая раскладка) - это узкоспециализированная потребность. 90% людей она нафиг не сдалась, они эти спецсимволы используют раз в год, и им проще из таблички символов вставить, чем чота там настраивать. Так что весьма себе продукт и достаточно удачный.

Опять же, говоря «костыли», я имел в виду не твою раскладку(хотя устанавливается, она, конечно, костыльно), а способ её изготовления.

lazyklimm ★★★★★
()
Последнее исправление: lazyklimm (всего исправлений: 2)
Ответ на: комментарий от lazyklimm

Я не про юникод, а про простое наличие каждого служебного символа английских раскладок в нашей. Менять раскладку чтобы просто вставить «>» - еще больший костыльп

Dreamject
()
Ответ на: комментарий от Dreamject

Менять раскладку чтобы просто вставить «>» - еще больший костыль

миллионы людей пользуются, и ничего. Тем более, что у тебя один фиг, далеко не все символы соответствуют английскому (а если учитывать, что для этого требуется ещё модификатор третьего уровня жать - то вообще не соответствует практически ничего).

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

Кстати, есть гораздо более стандартный способ получить все нужные символы - временное переключение раскладки (клавиша Mode_switch), при этом даже буквы на нужных местах будут. Чем твой способ лучше?

lazyklimm ★★★★★
()

lazyklimm, есть к тебе вопрос. я давно пользуюсь altgr-intl, ruu, xcompose, вот этим всем, и тут вздумал переехать на ErgoDox клаву, а у нее нехватает клавиш — но зато есть Hyper и еще пара лишних модификаторов. вопрос такой: можно ли в иксах запилить больше чем три уровня, скажем, пять (плюс шифты понятно)?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

можно ли в иксах запилить больше чем три уровня, скажем, пять

«8» можно, грепай /usr/share/X11/xkb/ по ISO_Level5_* (это имена клавиш на переключение) и EIGHT_LEVEL* (это типы клавиш с восемью уровнями).

lazyklimm ★★★★★
()
Ответ на: комментарий от val-amart

А чего там не хватает-то? В 26 алфавитно-цифровых клавиш с третьим уровнем влезает 52 символа. Этого хватит даже на все современные славянские кириллицы.

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

плюс спец-символы, плюс f-keys. я tenkeyless сейчас пользуюсь, и цифроблоком через модификатор — не vim'ом единым увы. энивей, спасибо за инфу, буду заказывать и пробовать тогда. а то были сомнения.

val-amart ★★★★★
()
Ответ на: комментарий от lazyklimm

Тем более, что у тебя один фиг, далеко не все символы соответствуют английскому

Это сделано, чтобы все служебные символы вводились аккордом в 2 клавиши. ПОхожим приёмом, кстати, пользуются французы-итальянцы и прочие, только у них ещё меньше расположение походит. Если сделать клавишу-нажимпереключалку, то большинство служебных символов будет вводиться 3-мя кнопками, да и >90 символов не будет, в т.ч. кавычек всяких.

Dreamject
()
Ответ на: комментарий от Dreamject

Это сделано, чтобы все служебные символы вводились аккордом в 2 клавиши.

эмм, в смысле 2? у тебя там половина с AltGr+Shift+собственно клавиша.

lazyklimm ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.