LINUX.ORG.RU

Включение раскладок двумя шифтами и клёвый демон triggerhappy (thd)


0

1

В первую очередь хочу выразить благодарность некоторым личностям с форума, которые натолкнули на мысль включать раскладки левым и правым шифтом и участвовали в обсуждении реализации. Особое спасибо webhamster, debugger и dikiy.

Решение от хомяка (Lolo-switcher) мне по многим причинам не понравилось, поэтому я решил изобрести свой велосипед. Наверно тоже костыльно вышло, и может быть избыточно, но работает исправно.

Итак, принцип включения раскладок: демон + скрипт контролируют скорость нажатия/отпускания клавиши, и если клавиша была нажата/отжата «ударно» (очень быстро), включается нужная раскладка. Я провёл эксперименты и выяснил, что лично для меня и моей клавиатуры быстрое нажатие Shift занимает в среднем 0,08 сек., тогда как то же с использованием шифта как модификатора не менее 0,11. Вот это различие я и решил использовать.

Кстати, мой способ решает проблему, высказанную Диким в обсуждении шифт-шифтов о том, что можно передумать. За десятую долю секунды мало кто успеет передумать :)

Решение кратко: ставим демон слежения за событиями (triggerhappy) в автозагрузку, настраиваем его на левый и правый шифты, настраиваем udev на доступ к устройствам input от пользователя, пишем баш-скриптик для включения раскладок демоном по событию.

Решение детальнее ниже.

В /etc/udev/rules.d/ создал файлик с таким содержанием:

DEVPATH=="*input*", GROUP="devevents"
+ естественно, создал эту группу и добавил в неё себя.

Установил triggerhappy и в его конфиге прописал следующие правила:

# Переключение раскладок
KEY_LEFTSHIFT 1 /bin/date +%s.%N > /tmp/l_shift_press
KEY_RIGHTSHIFT 1 /bin/date +%s.%N > /tmp/r_shift_press
KEY_LEFTSHIFT 0 /bin/sh /home/uns/make/sh/shift_shift_switcher.sh l
KEY_RIGHTSHIFT 0 /bin/sh /home/uns/make/sh/shift_shift_switcher.sh r
Там 1 - нажатие, 0 - отжатие.

Содержимое shift_shift_switcher.sh (покритикуйте, знаю что неоптимально скорей всего):

#!/bin/sh
Now=$(date +%s.%N)
Press=$(cat /tmp/"$1"_shift_press)
Duration=$(echo "$Now - $Press < 0.1" | bc)

if [ "$1" = l ] 
then
Layout='us,ru'
else
Layout='ru,us'
fi

#echo "$Duration $Layout" > /tmp/test
if [ $Duration -eq 1 ] 
then
setxkbmap -model evdev -layout $Layout -option -option 'grp:switch'
fi

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

В общем, посмотрим, я себе сделал так, если вдруг всплывут какие-то глюки, отпишусь. Пока вроде всё неплохо, хотя и тянется палец иногда по старой привычке на другие включалки (капс и правый контрол были раньше). Кстати, на капс теперь хочу повесить escape, и тогда работа в Виме станет ещё удобней.

П.С. Кратко о triggerhappy - очень клёвая штука, удобнейшая. Есть в репах у Debian. В отличие от xbindkeys работает на более низком уровне и поэтому работает «прозрачно» - пропускает нажатия дальше в иксы. В отличие от actkbd может запускаться от пользователя. И в отличие от обоих имеет более простой удобный конфиг. Рекомендую.

П.П.С. Как же ужасно странно и непривычно в баше! 1 - ложь, 0 - истина. Бррр. Ну не должно быть так.

Оказывается, в современных иксах переназначение капса вообще элементарно делается. Надо просто в опции добавить caps:escape и всё.

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

А чего оно жрёт-то?

Насколько понимаю, каждый раз при нажатии на shift, дергается два раза date и один раз bc с cat. Плюс, собственно, шелл. По-моему, это весьма препечально.

baverman ★★★
()

А, тем временем, уже не первый год существует куда более интересное решение — использовать для включения двух языков (не прокручивания по кругу, а именно включения) совершенно бесполезных в *nix клавиш Win/Command. Ну, и если необходимо более двух языков: то могут использоваться и шифты для циклического переключения между всеми заданными раскладками, с сохранением за ними своих стандартных функций.

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

Они не бесполезны. А использование их для включения чего-либо в иксах означает, что их нельзя будет юзать как mod*.

x3al ★★★★★
()

Использовать на каждое нажатие несколько микроскопических программок - это и правда, unix-way. Но я не назвал бы это расточительством. Пусть машина работает, чтобы мне было удобно. Если я не замечаю никаких неудобств и тормозов из-за этого, какие проблемы?

ctrl:nocaps
fixed

не fixed, а и так тоже можно.

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

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

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

>Они не бесполезны.

В чём польза?

А использование их для включения чего-либо в иксах означает, что их нельзя будет юзать как mod*.

Вам стандартных модификаторов мало? А для переключения языка — одной из самых важных для не-пиндосов операции пользуемся костылями. За дефолтную комбинацию в KDE «Ctrl+Alt+K» — того, кто это придумал, надо посадить за компьютер, и заставить набрать страниц десять-пятнадцать смешанного русско + английского+ с диакритикой текста на время, и за каждую заминку в при смене раскладки бить клавиатурой по тупой башке.

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

Чукча не читатель? :) Я же именно там и написал, в чём лично для меня польза win-клавиши.

А ещё я сейчас понял, что на caps кроме escape повешу ещё дополнительно переключение в английскую раскладку, и тогда вообще лепота будет. Потому что esc пользуюсь очень часто и после неё в 99% случаев нужна английская раскладка (нормальный режим Вима или команды в браузере).

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

>у меня они задействованы

Разумеется. И самое лучшее их «задействование» — это использовать для включения раскладок, ну, при условии, что вы часто и много работаете с двумя и более языками разумеется. Жители пиндостана и сочувствующие тоже иногда используют их, но несколько иначе.

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

Смешанный русско-английский текст удобнее всего набирать с grp:win_switch, например. Ну и compose где-то должен быть.

А об управлении WM уже всё сказали.

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

grp:switch у меня тоже включен, но умолчальный, он на правый альт настроен. Вообще, по-моему, это почти всегда неудобно, ну только если буквально пару символов набрать из другого языка. Такая раскаряка пальцев выходит, что уж точно быстрее просто переключиться туда-сюда.

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

С вимами/вимператорами удобно, если лень мапить весь русский алфавит.

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

>А ещё я сейчас понял, что на caps кроме escape повешу ещё дополнительно переключение в английскую раскладку, и тогда вообще лепота будет. Потому что esc пользуюсь очень часто и после неё в 99% случаев нужна английская раскладка (нормальный режим Вима или команды в браузере).

Vim прекрасно понимает и кириллические символы, впрочем как и браузер. Иначе было-бы довольно хлопотно работая к примеру с русским текстом, каждый раз переключать раскладку только для того, чтобы выполнить элементарное действие. Хотя, в случае применения клавиш «Win» для включения языков это и не выглядит очень трудоёмкой задачей.

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

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

Впрочем, тема уходит в троллинг, потому и я ухожу. Всем спасибо. Я просто поделился решением.

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

>Смешанный русско-английский текст удобнее всего набирать с grp:win_switch, например.

Разумеется, о чём я и толкую, только вернее будет: «grp:win_menu_switch»

Ну и compose где-то должен быть.

Compose не нужен, слишком муторное дело — третий уровень + «grp:win_menu_switch,grp:shifts_toggle,lv3:ralt_switch,nbsp:level2» + десятипальцевый метод — альтернатив просто не имеет.

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

>И самое лучшее их «задействование» — это использовать для включения раскладок

не, у меня всякие запускательно-управлятельный шорткаты.

А раскладки две - хватает правого альта с циклическим переключением

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

Третьего уровня мало.

//извращенец, способный вводить около 1000 китайских иероглифов (дальше подводит незнание ключей, да и иероглифов) только через compose.

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

>А вы точно хорошо понимаете, о чём речь?

Как 2x2.

Вим понимает русскую раскладку в нормальном режиме?

Как родную, и не только в нормальном, но даже в визуальном.

Вимператором можно пользоваться при русской раскладке?

Вот это не знаю, не пользуюсь, но Firefox понимает.

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

>//извращенец, способный вводить около 1000 китайских иероглифов (дальше подводит незнание ключей, да и иероглифов) только через compose.

Для случаев особой сложности есть пятый уровень, что в совокупности с первым и третьим позволяют вводить без переключения раскладки 576 символов, оставшиеся 576 можно повесить на вторую раскладку — единственное неудобство будет заключаться в необходимости переключения, но это много лучше (и проще), чем выводить через compose.

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

Да нифига не проще. С compose у меня работает мнемоника, с уровнями — запоминать комбинации. Я же вимер, а не емаксер, в конце концов.

А ещё compose может вставить строку, а не только символ.

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

>Вим понимает русскую раскладку в нормальном режиме?
Да.

Вимператором можно пользоваться при русской раскладке?

Насчет вимператора не знаю, а пентадактилем можно.

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

>Да нифига не проще. С compose у меня работает мнемоника, с уровнями — запоминать комбинации.

Уровни тоже можно сделать мнемоническими — у себя я именно так всё и переделал, даже латиницу, и сделал мнемоническую старо-славянскую раскладку на третьем уровне русской (тоже переделанную для человеческого набора типографики).

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

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

Краткий смысл: иероглиф разбивается на 1-4 части (если больше — выкидываются лишние из середины), каждая часть относительно однозначно соответствует какой-нибудь клавише. Естественно, клавиша отвечает за дофига (~5-6 вроде бы) частей, а конкретный ханзи можно (почти всегда однозначно) определить только сочетанием клавиш (1-4+compose+терминатор у меня, без костылей — выкидывается compose и это становится ещё одной раскладкой, -1 нажатие на знак, иногда -терминатор, +1 режим).

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

А ещё (для меньших извращенцев) — mdash vs ndash на двух/трёх дефисоминусах, лапки/ёлочки и прочая фигня. Ну и шаблонные фразы.

Ну и XCompose проще скостылить в винде, чем эти ваши четвёртые уровни.

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

>Прочитай это и предложи мнемонический аналог на уровнях, умник. Я бы с радостью этим воспользовался. Краткий смысл: иероглиф разбивается на 1-4 части…

Как два байта обсчитать… Идея в следующем: основной символ вешается на клавишу первого уровня, а его части вешаются на ту-же клавишу, но на вышестоящих уровнях. Итого: имеем 1+9 модификаций оставаясь в пределах одной раскладки.

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

>А ещё (для меньших извращенцев)

Это как посмотреть.

— mdash vs ndash на двух/трёх дефисоминусах, лапки/ёлочки и прочая фигня.

Удерживать compose + нажимать по несколько клавиш только для того, чтобы ввести стандартные и часто-используемые в русском языке знаки? И это вы называете «меньшим извращением»? А, между тем в стандартной русской раскладке на первом-втором уровне присутствуют зачем-то какие-то доллары, подчёркивания, одинарные и двойные кавычки, и прочие странные для русского глаза символы, а так-же никогда не используемые: «Ъ», «Ь», «Ы».

Ну и шаблонные фразы.

Ну, разве что, хотя при десятипальцевом наборе вещь совершенно не востребованная, и не стоящая занимать отдельную клавишу.

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

>Ну и XCompose проще скостылить в винде, чем эти ваши четвёртые уровни.

Я на этой вашей видне работал последний раз лет восемь назад, поэтому не вижу смысла обсуждать на этом форуме сексуальные проблемы её апологетов.

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

О, спасибо за идею повесить тире и прочие такие штучки на действительно ненужные в русской раскладке клавиши. Знак доллара пригодится, а вот неразрывный пробел вместо подчёркивания вполне можно поставить, да и тире куда-то всунуть.

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

>О, спасибо за идею повесить тире и прочие такие штучки на действительно ненужные в русской раскладке клавиши. Знак доллара пригодится, а вот неразрывный пробел вместо подчёркивания вполне можно поставить, да и тире куда-то всунуть.

Рекомендую, как вариант:

http://pastebin.com/nYcLY685

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

P.S. Латиница у меня правда тоже переделана — сделаны «¹ ₁ ℃ · ⁻ ⁼ ⁺» и т.д.

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

>Идея в следующем: основной символ вешается на клавишу первого уровня, а его части вешаются на ту-же клавишу, но на вышестоящих уровнях.

Осталось собрать символ из его частей… На «части» он поделен условно и чисто визуально, в юникоде нет таких комбинирующих символов (когда-то была такая идея, но не срослось) — только цельные иероглифы. В случае с compose символ вводится по нажатию последней клавиши (терминатора), однозначно определяясь из предшествующих клавиш.

Ну и с длиной комбинации до 4 символов получаем 25⁴=390k комбинаций. Этого хватает для того, чтобы назначить уникальную и мнемоническую комбинацию для всего. 25 — потому, что юзаются буквы латинницы кроме z.

Удерживать compose + нажимать по несколько клавиш

Зачем удерживать? Просто нажать. Вполне естественно для вимера.

x3al ★★★★★
()

а можно конспективно, чем иксовый grp:shifts_toggle не устроил? а то в той простыне на жопорезе откровенно лениво рыться

ananas ★★★★★
()

Полдня мучался, как дурак. Так и не удалось заставить работать это дело в автозагрузке через /etc/init.d/, слишком отличалось окружение у демона тогда и setxkbmap не производил никакого эффекта.

Я сделал ход конём. Тупо скопировал thd и th-cmd из /usr/sbin в /usr/bin и автозагрузка прописана теперь в ~/.xinitrc. Всё прекрасно работает. Красота!

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