LINUX.ORG.RU

Шпаргалка и расширенная раскладка для ввода символов с клавиатуры

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


1

2

За 5 минут не нагуглилось. Нашёл onboard, но это не то. Я набиваю тексты, в которых есть особые значки. Некоторое подмножество юникода. Я хочу, чтобы мне было удобно их набивать. Что это означает?

Это означает, что я нажимаю некую глобальную (в рамках оконного менеджера) горячую кнопку. Ну, скажем, AltGr, и отпускаю её. После этого на экране появляется изображение клавиатуры. Далее я нажимаю и/или удерживаю другую кнопку, допустим, Shift, Ctrl, Caps, F1-F7 и т.п. У меня меняется на клавиатуре раскладка (при удержании одних кнопок и при нажатии других) и сразу отображается. Далее я нажимаю, допустим, на кнопку «а» на своей физической клавиатуре и соответствующий символ вводится туда, где находится текущий текстовый ввод. Далее я нажимаю Esc и клавиатура исчезает, ну или сразу исчезает после ввода одной буквы.

Есть такое? У меня LXDE.

★★★★★

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

Нажимаю клавишу Ctrl, и получаю второе окно с заголовком «Application Error» и текстом «Error: illegal use of | or |& in command». WTF?

Нажатия на Shift и Alt так же приводят к «Application Error».

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

Допустим, я передумал вводить «значки». Нажимаю кнопку с крестиком в правом верхнем углу окна, окно закрывается. Скрипт эклава.sh продолжает работать. WTF?

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

Смотрю в файл эклава.sh:

SCRIPT_PATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
wish $SCRIPT_PATH/эклава.tcl

Тут всё как я люблю:

Нет шебанга. Шебанг придумали трусы. Скрипт же исполняется любым шеллом, правда?

Заметаем мусор под ковёр. Ошибки команд cd и dirname, если таковые возникнут, отправляются в /dev/null. Ну, правильно, жизнь была бы пресна и скучна, если бы каждая программа печатала простое и понятное сообщение об ошибке. Гораздо интереснее трахаться с программой, которая творит что-то неожиданное и при этом молчит как партизан.

И самое главное: Мы же не можем добавить шебанг #!/usr/bin/wish в эклава.tcl и сделать его исполняемым, это было бы слишком прямолинейно, а нормальные герои всегда идут в обход! Давайте напишем скрипт, для исполнения которого будем запускать шелл, а внутри запустим ещё два шелла и программу dirname. Даёшь четыре новых процесса вместо одного! Процессор должен работать! Вкалывают роботы, счастлив человек!

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

Набор значков для ввода как-то не очень богат. Что делать, если я хочу добавить значок на клавиатуру? В README.md автор намекает, что надо править исходник. WTF?

В том же README.md написано:

Известные проблемы
Фигурные скобки не вставляются (вставляются с обратной косой впереди)

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

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

Удачи.

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

Нет шебанга. Шебанг придумали трусы. Скрипт же исполняется любым шеллом, правда?

У меня он не работал почему-то, я даже пытался посмотреть, как это сделано в gitk. В gitk - работает, у меня не работат.

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

В README.md автор намекает, что надо править исходник . Да, надо править исходник, но это не сложно. В любом случае что-то нужно править. Какая разница, исходник или конфиг-файл?

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

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

Спасибо, сделал через xdotool, без танцев с бубном не обошлось, но вроде работает, вот так:

λ„“ «»«»Ω ♥°†×☼

спасибо, я не знал, что так можно.

А также:

  • убрал неработающие фигурные скобки и добавил в раскладку кавычки ёлочки и лапки. Что ещё добавить для народа?

  • убрал зависимость от tablelist

  • программа завершает работу по крестику и esc

  • ctrl,alt и shift тоже приводят к завершению, хоть и кривовато, но я для этого ничего специально не делал

  • выкинул кучу ненужных файлов

  • подумал ещё и добавил символы, которых мне часто в жизни не хватает:

    • — (тире)
    • ✓ - галочка
    • § - параграф (ну на самом деле параграф не нужен, просто закончились нужные значки)
den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 3)
Ответ на: комментарий от den73

Хм, а как с первой справился? У меня просто с незапамятных времён этот tablelist стоит.

dnf install tklib-0.5-27.fc38.noarch

А тебе нужны фигурные скобки, они же и так есть в английской раскладке?

Мне — нет. Мне эклава вообще не нужна. Я чисто из любопытства заглянул посмотреть что это. Но это просто позор.

У меня он не работал почему-то, я даже пытался посмотреть, как это сделано в gitk. В gitk - работает, у меня не работат.

shebang, BOM. Дальше сам справишься или разжевать?

И вообще, это скрипт для себя.

Если скрипт для себя, тогда зачем ты выкатил его на всеобщее обозрение? Это во-первых. Во-вторых, для себя обычно делают хорошо, а не на отъ.бись.

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

Не надо там впахивать, достаточно добавить шебанг в эклава.tcl. Всё.

Что ещё добавить для народа?

Не льсти себе. Никому кроме тебя эта наколенная поделка не нужна. Чтобы довести её до приемлемого уровня, нужно «впахивать», а у тебя нет желания, у тебя работа есть и всякое другое.

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

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

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

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

shebang, BOM. Дальше сам справишься или разжевать?

Действительно, в файле обнаружился BOM, и, если его убрать, проблемы с шебангом исчезают. Но я ведь неспроста не начал проект с нуля, а взял ранее работавший проект и выкинул лишнее. Данный скрипт раньше мог работать и под офтопиком, и там, скорее всего, BOM был по делу. Без шебанга он работать может, а будет ли он работать под Windows без BOM? Сейчас нет мотива проверять, да и весьма вероятно, что в ходе чистки я случайно удалил часть кода, отвечающего за работоспособность на windows. Однако дальше ломать совместимость с Windows точно нет причины, ради того, чтобы избавиться от одного слоя обёрток.

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

Действительно, в файле обнаружился BOM, и, если его убрать, проблемы с шебангом исчезают.

Удивительно! Оказывается, ссылку на BOM я тебе не просто так посылал?

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

Во-первых, ради работы под виндой ты на линуксе создаешь 4 (четыре!) процесса там, где можно обойтись одним. Подход, мягко говоря, странный.

Во-вторых, нельзя сломать то, чего нет. Я тебе секрет открою: xdotool под виндой не работает, потому что x как бы намекает на «X Window System», которая, несмотря на слово Window в середине, совсем не то же самое, что Windows. Поэтому твои рассуждения о «совместимости с Windows» — глупое теоретизирование о том, чего нет.

В-третьих, шебанг для интерпретатора тикля является — внезапно! — комментарием.

В-четвёртых, что я вижу в первой строчке эклава.tcl? Строчку «encoding system utf-8».

Три + четыре сам сложить сможешь или надо жевать?

Ладно, эта тема мне уже надоела. Удачи.

debugger ★★★★★
()

Ещё кое-что поправил:

  • ввод фигурных скобок (хоть они мне и не нужны)
  • можно назначить кириллицу в качестве символа, который надо вывести по нажатию кнопки (с этим были проблемы)
  • поправил работу знака «=»
  • необязательный вывод в лог для отладки
  • возможность задать свою раскладку в отдельном файле
  • можно в макете клавиатуры в качестве обозначений писать кнопки кириллицы, а не латиницы, вот так:
|``|1✓|2☼|3§|4$|5°|6закр-фигурная-скобка|7откр-фигурная-скобка|8₽|9„|0“|-—|=вертикальная-черта|
| |q |w |e×|r†|t |y |u |i |o |p |[«|]»|  |
|  |фΩ|ыЫ|вₒ|а |п |р÷|о |лλ|д |; |" |\∫|
|   |z |x |c♥|vₓ|b•|nØ|mѢ|,ѣ|. |/ |
  • минимальное руководство по отладке
  • ещё немного кода выкинул
den73 ★★★★★
() автор топика
Ответ на: комментарий от debugger

Ты главное от важности не лопни. Эклава является обломком проекта «Яр», который был написан на CL и Tcl/tk и работал как под виндой, так и под Линуксом. В эту совместимость было вложено немало усилий. То, что под виндой нет xdotool, я понимаю ничуть не хуже тебя. Однако BOM там скорее всего был для чего-то нужен. Если я его сейчас уберу, а потом вдруг захочу, чтобы эклава работала и под виндой, мне чинить на одну вещь больше. Создать 4 процесса - это не страшно, компьютер на то и железный/кремниевый, чтобы работать вместо человека. Линукс же славится дешевизной своих процессов, верно? Вот пусть и трудится. А так-то вообще можно не делать экранную клавиатуру, а вставлять значки из «средства просмотра символов» или из веба. Так что говорить о том, что какой-то там подход странный - само по себе странно.

Задача решена. Все твои замечания по существу я учёл и большинство из них даже поправил, т.к. они были справедливы. А шебанг в данном случае - несущественная техническая деталь. Кроме того, меня смущал и то, что когда он как бы работал, в каких-то случаях после аварийного завершения процесса tcl код на tcl отправлялся в баш и вызывал у того разрыв шаблона. Это значит, что технология сама по себе дурная, неважно, от BOM ли это получилось или нет. Линукс ведь сам изначально сделан дцать лет назад на коленке, и во многом таким же и остался. Поэтому надо не следовать его стандартам во всём, а обходить мутные места. Таковым мутным местом и оказался шебанг для tcl. То, что я его выкинул, правильно и так и надо делать.

Само по себе трёхстрочное начало, которое нужно для запуска wish-скриптов через шебанг, а именно:

#!/bin/sh
# Tcl ignores the next line -*- tcl -*- \
exec wish "$0" -- "$@"

Является, очевидно, каким-то мутным костылём. Нахрен такое. Кроме того, за счёт обёртки я могу выводить логи, если это нужно:

SCRIPT_PATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
mkdir -p ~/.config/эклава

# можно включить вывод в лог, если есть какие-то проблемы
Vyvod_v_log=1

if [[ $Vyvod_v_log == 1 ]]; then
  wish $SCRIPT_PATH/эклава.tcl > ~/.config/эклава/эклава.log 2>&1
else
  wish $SCRIPT_PATH/эклава.tcl 
fi

В случае использования шебанга я не знаю, как это можно было бы осуществить. Кстати, тут ошибка - вывод в лог включён, а надо бы его выключить. И это тоже поправил.

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

(да, твой однострочный шебанг не работает, господин учитель; трёхстрочный вариант процитирован из which gitk, и в tkcon, как ты можешь убедиться, аж четырёхстрочный шебанг ).

Эти приложения написаны людьми, которые, в отличие от нас с тобой, действительно знают tcl/tk.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
4 марта 2024 г.
Ответ на: комментарий от debugger

Наконец достал из закладок этот пост и сделал эмуляцию нажатий. Просто супер!

Давно хотел разобраться с xcompose, чтобы печатать всякое, но, например, клавиша Menu (Compose) не удобна, когда символы в правой руке. Благодаря такой возможности в таппере, повесил compose на обе Ctrl (они у меня рядом с пробелом по обе стороны назначены).

Вот только не знаю как назначать в линукс compose на несуществующую клавишу (у тебя, понятно, это не объясняется). Впрочем, в gnome-tweaks я её повесил на правый Super, а его у меня нет 😀

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

Давно хотел разобраться с xcompose, чтобы печатать всякое, но, например, клавиша Menu (Compose) не удобна, когда символы в правой руке.

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

Благодаря такой возможности в таппере, повесил compose на обе Ctrl (они у меня рядом с пробелом по обе стороны назначены).

Удар по контролу эмулирует нажатие клавиши, которая инициирует композ? Ну, да, вариант.

Вот только не знаю как назначать в линукс compose на несуществующую клавишу (у тебя, понятно, это не объясняется).

Если всё объяснять, то очень много писать придётся, поэтому я сдерживался. Кроме того, далеко не все в Гноме работают, а как это делается в не-Гноме я понятия не имею. Впрочем, я этим вопросом и в Гноме не сильно интересовался, т. к. на моей любимой клавиатуре отсутствует правый Win (хрен знает как его политически корректно называть — то ли Super, то ли Meta), я его пользовал, а повесить композ на правый Win можно штатными средствами. Возможно, для того, чтобы вешать композ на экзотическую несуществующую клавишу, придётся править конфиги Xkb, а для того, чтобы исправления не пропадали, делать рпм… Ну, вроде всё просто, но описывать всё так, чтобы было понятно чайнику довольно муторно.

Впрочем, в gnome-tweaks я её повесил на правый Super, а его у меня нет 😀

Как раз мой вариант.

Т. е. ты со всем справился и от меня ничего не требуется?

И, кстати, лучше бы создал новую тему, здесь это выглядит офф-топом.

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

Её же не надо удерживать нажатой, поэтому, кажется, должно быть по барабану.

Висела на клавише Menu, но как-то мне неудобно, вот и решил попробовать на контроллы, посмотрим что получится на практике, и в любом случае лучше, чем было.

Т. е. ты со всем справился и от меня ничего не требуется?

Да, просто хотел сказать, что это офигенная тема – эмуляция нажатий, очень удобно! Теперь таппер не просто включалка раскладок, а ещё вот это вот.

А будешь эмуляцию как-то в dconf добавлять? Я пока просто в десктоп-файл в Exec написал.

лучше бы создал новую тему, здесь это выглядит офф-топом

На тему вроде не тянет, и здесь точно не оффтоп.

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

Да, просто хотел сказать, что это офигенная тема – эмуляция нажатий, очень удобно!

А то ж. Я ж это на себе испытал, прежде чем на публику выкатывать.

А будешь эмуляцию как-то в dconf добавлять? Я пока просто в десктоп-файл в Exec написал.

? Эмуляция нажатия клавиш в конфиге присутствует. Там даже после слова Description всё расписано как и что. Но чучка азиат не читатель, азиат писатель.

И, кстати, лучше бы создал новую тему, здесь это выглядит офф-топом.

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

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

Там даже после слова Description всё расписано как и что.

Точно, работает. Гы, что-то строка KEY — Emulate <...> мне ни на что не намекала… 🤣

С точки зрения маркетинга популяризации таппера новая тема гораздо предпочтительнее.

Новость надо запилить, когда будет новая версия. У тебя есть RSS, чтобы последить за выходом? Хотя, я же репу подключил с новой версией, так что от DNF-а должен узнать, если для EL8 тоже будет свежая.

papin-aziat ★★★★★
()
26 августа 2024 г.

Добавил элементы греческого алфавита. Теперь в приложении три разных раскладки клавиатуры. Нажимаем горячую клавишу, чтобы активировать само приложение, и дальше кнопки 1,2 и 0, чтобы переключаться между раскладками. Хорошо было бы сделать модификацию по Shift, Ctrl, Alt и чтобы подсказки перерисовывались, но слёту не вышло, а разбираться некогда. Мне сейчас просто реально надо вести переписку с применением греческих букв, и разбираться в каких-то там документах, поэтому и сделал.

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

sway конфиг:

bindsym $mod+i exec swaynag --button-gap 1 -m "" -z "Q" "wl-copy 'qwe2'" -z "W" "wl-copy 'qwe3'"

Результат

Менеджер - sway. Но подозреваю, что swaynag можно заюзать в любом менеджере. В одну строку swaynag можно набить около 60 кнопок. Вполне норм вариант, и делается за 10 минут на коленках из палок

К swaynag есть небольшой костыль swaynagmode, он позволяет вкрутить навигацию по swaynag с клавиатуры, чтобы не мышевозить.

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

Менеджер - sway. Но подозреваю, что swaynag можно заюзать в любом менеджере.

А если нет, то можно заюзать какой-нибудь ланчер - dmenu/wmenu, поддержка клавиатуры из коробки. Заполнить менюшки элементами вида «q-SYM», вот и готов байндинг символа на Q

PS: и ещё одна плюшка - если текст набирается в нормальном редакторе (vim, например), то вообще сказка - из вима запускаем w\dmenu, выбираем по сочетанию клавиш нужный символ, выхлоп сразу вставляем в редактор без дополнительного костыля в виде буфера обмена. Очень простое, красивое и удобное решение размеров в 10 строк

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

https://tvoygit.ru/budden/ehklava - добавил изображение, как она выглядит на экране. Твою картинку не понял. Это что ли наверху красная полоса и из неё надо мышью выбирать? Ну вообще это совсем не так же удобно, как у меня. У меня сразу кнопки, причём сама клавиатура является подсказкой, и при желании можно мышью нажать (хотя сам я так никогда не делаю).

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

Твою картинку не понял. Это что ли наверху красная полоса и из неё надо мышью выбирать?

Да. Следом кидал ссылку на костыль по навигации по этой полосе при помощи клавиатуры.

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

Решение с dmenu/wmenu - превосходит swaynag, там из коробки и клавиатура, и видел какие-то хитрые менюшки на их основе, т.е. при желании можно сделать хитрую конфигурацию элементов, и можно обойтись без буфера обмена.

Ну и самое главное - это действительно то, что делается за 10 минут на коленках, если нужно ехать, а не шашечки вставлять спец символы в текст, то самое оно учитывая простоту реализации

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

Ну и самое главное - это действительно то, что делается за 10 минут на коленках

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

den73 ★★★★★
() автор топика
13 ноября 2024 г.

Понадобилось подобное под Windows. Не осилил (немало сил потратил) сделать как надо под Windows, в итоге нашёл uosk, которая позволяет вводить только мышью. Но ничего, для данной задачи подойдёт. Зато простое приложение на Си, без всяких там культей, пауэршеллов и прочих огромных зависимостей. Работает со скоростью молнии, прямо как будто не офтопик.

Забавно, что имена в коде написаны на каком-то латинообразном языке. Вот примерчик:

// funzioni del Frontalino

#include "macro.h"

// creazione Frontalino
void creaFrontalino() {
	hFrontalino = CreateWindow( "Static", NULL, WS_CHILD|WS_VISIBLE|WS_BORDER,
								0, 0, 100, 100, hWindow, (HMENU)ID_STATICO, GetModuleHandle(NULL), NULL );
	SubclassWindow( hFrontalino, proceduraFrontalino );
	CreateWindow( "Button", "Create a new keyboard", WS_VISIBLE | WS_CHILD | WS_TABSTOP, 
				70, 20, 160, 35, hFrontalino, (HMENU)ID_FRONTE_NUOVO, GetModuleHandle(NULL), NULL );
	CreateWindow( "Static", "Open preset keyboard", WS_CHILD|WS_VISIBLE,
				20, 70, 200, 20, hFrontalino, (HMENU)ID_STATICO, GetModuleHandle(NULL), NULL );
	HWND hNienteCartella = CreateWindowW( L"Edit", L"", WS_CHILD | ES_MULTILINE, 20, 70, 260, 80,

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

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