LINUX.ORG.RU

lay: помощник раскладки RU/EN по double Shift для GNOME Wayland

 , , , ,


3

3

Проект lay — небольшой помощник раскладки для GNOME/Wayland.

Главный сценарий простой: если слово набрано не в той раскладке из сочетания RU/EN, нажимаешь Shift два раза, и оно перепечатывается в другой раскладке.

Примеры:

ghbdtn      -> привет
good ntrcn -> good текст
wi-fi ye   -> wi-fi ну

Основной путь локальный: Rust daemon + evdev/uinput + маленькое GNOME Shell extension для переключения раскладки. Обычный double Shift не использует облако, буфер обмена или LLM.

Проект в стадии beta, сделан автором новости под личную боль после Caramba на Windows. Кому надо — берите, тестируйте, присылайте короткие воспроизводимые баги.

Хабр-песочница: https://habr.com/ru/sandbox/284260/

>>> GitHub

anonymous

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

Я тут, по заветам дидов, купил usb-педаль (типа такой: https://ozon.ru/t/nPZzLbZ не реклама), настроил sway и теперь можно печатать без остановки, в нужный момент нажимаю педаль и автоматически набор идет в кириллице. Отпускаешь - сразу же латиница. Долго искал правильное решение для обработки события (педали эти не до конца корректно генерят что-то, уже и забыл, что). В общем, рекомендую. Сначала привыкнуть надо, а потом педалишь с двойной скоростью, плюс ноги не простаивают, пригождаются в работе.

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

Там всей функциональности - запомнить два слова и заменить последнее. Все. Какие предложение? Какие раскладки?

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

Я понимаю что кросстулкитно это реализовать будет крайне сложно, но ведь и диагноз у ЦА непростой. (%

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

Автор софтины сделал софтину под свой конкретный кейс, который ему достаточен.

Какая ЦА, какие сложности…

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

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

Ты какой-то однорукий бандит… (%

Shift_R существует как раз дла того, чтобы пользоваться им, когда нужно нажать кнопку левой рукой. Shift_L, соответственно, для того, чтобы кнопки жать правой.

Я попробовал правый шифт - очень непривычно тянуться, у меня правый мезинец так не работает. Вообще не вариант.

Можно смещать всю руку. Обратно рука нащупает насечку на F/J и встанет на место.

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

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

lay: помощник раскладки RU/EN по double Shift для GNOME Wayland (комментарий)

Вот я для себя под иксы наклепал что то прохожее. Добавил легкую ИИшку (12мб озу потребления) для исправления опечаток.

Можешь форкнуть проект ТСа и добавить что то похожее - это несколько строк кода. Вариантов как сделать не только последнее слово - море. Я сделал множественным нажатием на шифт. Два нажатия - последнее слово, три нажатия - два слова, четыре нажатия - три слова итд.

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

Добавил легкую ИИшку (12мб озу потребления) для исправления опечаток.

Ахахахахахахаха!
А просто взять словари и нечёткий поиск?

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

Ну что то вроде того и взял на самом деле. Сейчас переключился на PySpellChecker. Но не теряю надежды подключить ллмку. Если найду легкую и рабочую.

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

На самом деле как раз последнее слово обычно и надо заменить

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

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

А просто взять словари и нечёткий поиск?

Тогда будет недостаточно всрато.

Не @LightDiver молодец. Без приколов. Не ждёт милостей природы, а пишет код.

Но момент с ИИшницей смешной, это да.

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

А я сделал у себя хитрее, не просто смену последнего слова, а смену нужного количества слов вместе с автоматическим переключением раскладки. Так что сойдет. Жмешь быстро шифт дважды и не только чинишь слово, но и раскладку меняешь

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

Я дошел до 4гб потребления с ллмками, в итоге оно пока выдает полную херню.

Просто почему хочется именно ИИшку - с ней можно много и более хитрого сотворить. Но видимо не с моим железом.

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

Ну каждому своё, конечно.

У меня у меня проблема неправильной раскладки в принципе очень редко возникает. Хоть я и использую переключение раскладки, я всё равно знаю, какая включена сейчас. Просто перед тем, как начать печатать на русском, я нажимаю капс. Закончил печатать на русском — нажимаю капс снова. Поэтому получается, что когда я позанимался чем-то ещё, раскладка всегда английская, случайно русская не бывает, и если при этом мне надо печатать на русском, я просто уже по привычке тыкаю капс.

Неожиданно оказаться не та раскладка может разве что в каких-то прям очень редких чрезвычайных ситуациях. Ну там, фиг знает, что-то мегаважное или опасное ИРЛ произошло, что внезапно подорвался от компа, не закончив печатать на русском и не нажав в конце капс для переключения обратно на английский.

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

Я больше 20 лет просидел на капсе и всеравно часто начинаю печатать, надо на английском - оно на русском, надо на русском, оно на английсоком. Это сотни случаев в день.

Я сделал три уровня у себя: 1) запоминает на каждое окно свою раскладку и при возврате фокуса на него автоматически принудительно врубает нужную. Это например полезно для терминала, для игр 2) Разнес переключатель раскладки на два разных хоткея. Сделал включателем. 3) Два варианта починки слова - алгоритмом и словарем/иишкой.

Но после 20+ лет капса очень тяжко привыкать к двум разным.

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

Я больше 20 лет просидел на капсе и всеравно часто начинаю печатать, надо на английском - оно на русском, надо на русском, оно на английсоком. Это сотни случаев в день.

У меня может один-два случая в месяц. Достаточно было просто выработать привычку «закончил перчатать по-русски — ткни капс — даже если пока не собираешься больше ничего печатать».

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

А вот про принудительное переключение раскладки при завершении печати - это надо подумать. Может сделать алгоритмик, который будет следить и переключать автоматически при завершении. Я еще подумаю где это можно применить.

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

Ну так проблема то есть. И не решена. Многие пытаются решить десяток за десятком лет.

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

Ну так я и изменил один раз. Работает хорошо, меня устраивает.

«Включение» я тоже пробовал, но мне не зашло. Дело не столько в переучивании даже, сколько в том, что нет второй такой же удобной комбинации как клавиша капслок. А две клавиши нажимать для меня перебор — я лучше переключать буду, мне так проще и удобнее. Вот если бы капслок на две клавиши разделить, причём как-то так их ещё и разместить, чтобы обе было легко мизинцем тыкать — одну для включения русской раскладки, другую для включения английской — вот это было бы дело. Но это надо кастомную клаву собирать, а я не настолько заморочен.

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

Там где мне надо чинить, там наверное такое невозможно. В игре надо печатать по-русски и команды латиницей. Это постоянный тестинг кода туда сюда. Хрен уследишь. Всетаки я тестирую софтину - такой кайф сейчас. Тык-тык и готово..

Вот представь, тебе надо в одном и том же окне сотни раз в день туда сюда. С переключением на редактор кода. Код написал, переключился, ответил в чате, ввел команду, протестил код и так туда сюда.

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

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

А если прям совсем пофантазировать, наверное прикольно было бы где-то там на месте капслока сделать не клавишу, а теребоньку™ — рычажок вверх торчащий, который легко мизинцем в одну или другую сторону шатнуть, но при этом случайно не заденешь. В одну сторону его переключаешь — русски, в другую — английский. Тоже не перепутаешь, как две клавиши, но занимет одно и то же место, ну и сам ещё и служит индикатором, в том числе тактильным.

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

Я тут подумал, слуууушай. А если один капс - английский, двойной капс - русский. Гениально! Буду тестировать.

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

Вот представь, тебе надо в одном и том же окне сотни раз в день туда сюда. С переключением на редактор кода. Код написал, переключился, ответил в чате, ввел команду, протестил код и так туда сюда.

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

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

на работе она и разное переключение в разных системах

В Mahou настраивается переключалка под венду. Посмотрите, может зайдет.

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

По его совету поправил расширение agism.

В файле metadata.json добавил нужную версию gnome:

Не взлетело (. У меня он как бы работает. Нажатие переключает раскладку, но при начале ввода она слетает обратно. Короче, не работает ))

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

Сделаю ка я себе его без привязок к гномам и вэйлендам

Делай! И тут же делись с нами постигнутым «дзынем» достигнутыми результатами!

И сразу перепишу на раст изначально

Начало-о-о-ось!... :D :))))))

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

https://github.com/Vladgobelen/NSkbd

Уже давно готово. И работает. Универсально принимает словари, ИИшки при необходимоси или на чистых алгоритмах. Так же пара моих фич. Там описание есть.

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

Не конфликтует с настройками ДЕ - просто надстраивается сверху. Но тестировал только на КДЕ.

Ах дааа! Это же раст! Не течет! Ну ладно, не течет бинарная часть. Словари и ИИшки через скрипт на питоне могут подтекать, но отключаются одним хоткеем. Жрет максимум что то в районе полутора метров. ЦПУ не жрет вообще, ибо триггерное.

Я себе его одемонил:

#!/sbin/openrc-run

description="NS Keyboard Layout Switcher"
command="/home/diver/sources/RUST/NSkbd/target/release/NSKeyboardLayoutSwitcher"
command_background=true
pidfile="/run/nskbd.pid"
directory="/home/diver/sources/RUST/NSkbd/target/release"
command_user="diver"

depend() {
    need display-manager
}

start_pre() {
    export DISPLAY=:0
    export XAUTHORITY=/home/diver/.Xauthority
    cd /home/diver/sources/RUST/NSkbd/target/release
    
    # Создаём pid-файл с фиктивным PID, если его нет
    if [ ! -s "${pidfile}" ]; then
        echo "0" > "${pidfile}"
        chown ${command_user}:${command_user} "${pidfile}"
        chmod 644 "${pidfile}"
    fi
}

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

Я тут, по заветам дидов, купил usb-педаль (типа такой: https://ozon.ru/t/nPZzLbZ не реклама)

" Используйте USB-ногу для управления компьютером с помощью любой ноги"... :D :)))

А если у меня нет «USB-ноги», а есть только ноги нормальные??.. ;))

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

Кеды и так могут запоминать раскладку для каждого окна/приложения. Так что половина функций твоего приложения не нужна изначально.

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

Не, ты не понял основную идею. Кеды не просто запоминают. Они запоминают последнюю. А я запоминаю с жесткой привязкой. У окна всегда при фокусе будет эта раскладка. Она никогда не будет другой.

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

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 3)

Десятилетия шли, в Линупсе всё пилили раскладку клавиатуры

duott ★★★★★
()

Спасибо всем за обсуждение и идеи. Я как раз читал комментарии и часть замечаний уже забрал в работу.

Коротко по пунктам.

  1. KDE / X11 / другие окружения

Изначально lay был сделан под мой личный GNOME Wayland кейс, поэтому переключение раскладки было завязано на маленькое GNOME Shell extension. Это не идеологическая привязка, просто самый быстрый рабочий путь под мою систему.

После комментариев вынес переключение раскладки в отдельный backend-слой. Сейчас в коде появился параметр:

"layout_backend": "auto"

Поддерживаемые значения:

auto
gnome
kde
x11

GNOME работает как раньше через Shell extension. KDE backend пробует qdbus/qdbus6 org.kde.keyboard /Layouts setLayout. X11 backend экспериментальный: сначала xkb-switch, потом xkblayout-state, потом fallback на setxkbmap.

Это ещё не обещание, что всё идеально заведётся на любой KDE/X11-сессии, но теперь архитектурно это не GNOME-only монолит.

  1. Почему не просто CapsLock / Shift+Caps

Да, для многих CapsLock или разные клавиши для RU/EN лучше. Но моя боль была другая: я уже напечатал слово не в той раскладке и хочу одним рефлексом перевернуть именно набранный хвост, без удаления и перепечатывания.

То есть lay не пытается заменить все способы переключения раскладки. Это Caramba/Punto-подобный rescue-сценарий.

  1. Несколько слов

Идея из комментариев про множественное нажатие Shift хорошая:

2 тапа -> последнее слово
3 тапа -> два слова
4 тапа -> три слова

Внутри lay уже есть scope 1/2/3 слова и smart-логика, которая старается не трогать хорошие соседние слова. Но текущий double Shift специально быстрый, без ожидания дополнительного тапа. Поэтому многотаповый режим надо делать отдельным режимом, чтобы не добавить задержку всем пользователям.

  1. Словари и алгоритм

Для обычного double Shift словари не нужны: программа хранит физические keycode-нажатия и перепроигрывает их в другой раскладке.

Словари используются в smart/typing assist части:

  • RU/EN layout mapping;
  • Hunspell-словари;
  • char n-gram scorer;
  • маленький LEM-ранкер для выбора между готовыми кандидатами;
  • персональные точные замены из конфига.

Цель не “умная болталка”, а консервативный помощник: исправлять только когда сигнал достаточно сильный.

  1. Tapper / Mahou / NSkbd

Спасибо за ссылки и примеры. Я посмотрю идеи отдельно. Особенно интересны:

  • запоминание раскладки на окно;
  • отдельные клавиши RU/EN;
  • поддержка не-GNOME окружений;
  • словарный/нечёткий correction layer.
  1. Статус проекта

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

GitHub: https://github.com/radislabus-star/lay-public

Если кто-то тестирует KDE/X11 backend, самый полезный формат обратной связи:

DE/WM:
session type:
layout tool:
что набрал:
что нажал:
что получилось:
что ожидалось:
radislabus-star
()
Ответ на: комментарий от radislabus-star

Я просто отслеживаю по отпускании шифта и жду еще 300мс после отпускания. Если не было нажатия, значит закончили. Это про множественность нажатий шифта.

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

ллмку [...] легкую и рабочую

Взаимоисключающие параграфы. (=

Точность пересчёта матриц требует ресурсов. Чем больше матрица и чем точнее её пересчёт — тем лучше результат. И тем дороже процесс.

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

Не @LightDiver молодец. Без приколов. Не ждёт милостей природы, а пишет код.

Я ничуть не пытаюсь принизить или оскорбить его.

Но момент с ИИшницей смешной, это да.

This.

А просто взять словари и нечёткий поиск?

Тогда будет недостаточно всрато.

Всё что угодно будет менее всрато, чем нейросети не на своём месте. А их сейчас пытаются впихнуть буквально вместо всего.
Жаль, что ещё не допёрли использовать его вместо пользователей (ИИ в качестве потребителя контента и/или клиента — это просто эпик!)…

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

Ты сейчас ботов изобрел?

Не изобрёл, конечно, но хотелось бы увидеть как кто-то возведёт ботоводство в абсолют.

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

Просто осталось дождаться, когда ИИшки станут платежеспособны и вот тогда…

Так они уже. В них вливается ОЧЕНЬ много денег.

Нужно только сделать на сайтах удобный для ИИ API, возможно автотокерайзер, и всё. Компании, соскребающие данные с каждого сайта сами становятся подписчиками на контент. Anubis, защищающий от сбора данных с помощью ИИ уже есть.


Если что, я дополнил этот комментарий, чтобы всё выше него не выглядело троллингом (я не пытаюсь тебя троллить).

mord0d ★★★★★
()

пользователи Intellij IDEA смотрят на тебя с укоризной…

bvn13 ★★★★★
()

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

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

неужели кто-то еще этим занимается.. )
подобную прогу недавно писал для себя под вин

Cам спросил - сам и ответил... :))

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

Весь буфер это сколько? А разбиение на слова? Там чуток побольше надо продумать. Да и написать много чего можно: ghbdtn dctv! - хоп, вот тебе не буква и не цифра.

Если сделать работу через буфер обмена, можно сделать этакий мини-редактор текста на хоткеях опционально. Можно будет простейшими хоткеями редактировать введенное быстро.

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

Ты вот сейчас шифт+капс попробуй нажать, не отрывая руки от клавиатуры.

Левым мизинцем легко жмутся обе клавиши сразу.

Или я чего-то не понял?

qwe ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.