Вопрос Индикатор языка ввода на клавиатуре (или цвет курсора)


Возможно ли иметь указание на входной язык на клавиатуре (или рядом с ним) или, возможно, изменить цвет курсора в зависимости от языка ввода?

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


2
2018-01-13 19:57


происхождения


Я думаю, вы могли бы изменить тему курсора мыши (которая все еще может быть переопределена приложениями), но, вероятно, невозможно настроить, как курсор ввода текста должен выглядеть на системном уровне, потому что это зависит от приложения. - Byte Commander
@ByteCommander Возможно, есть способ найти курсор клавиатуры? В этом случае можно показать что-то рядом с курсором. - GLaz


ответы:


Конечно, это возможно, но решение для этого я придумал очень ... уродливо.

Прежде всего, вам нужно будет создать собственные темы курсора с вашими собственными цветами. Вы можете скопировать те, которые у вас есть /usr/share/icons (проверьте наличие папок, содержащих cursor.theme файл) в ваши пользователи ~/.icons папку, переименовать их по вашему выбору и раскрасить. Для доказательства концепции я покажу вам отдых, просто используя темы курсора, которые уже должны быть доступны в системе. Скажем, «DMZ-White» и «DMZ-Black».

Что касается раскраски курсоров, вы можете сделать это с помощью GIMP, и это «раскрасить» функцию / фильтр, но вы должны применить его ко всем слоям (разные размеры), а затем экспортировать эти файлы с помощью .xmc и затем разделите это расширение, так что имена похожи на оригинальную тему источника.


В разных средах рабочего стола есть разные методы для хранения текущей раскладки клавиатуры и для той, над которой я работаю (MATE). Я даже не смог найти хороший метод, поэтому мне нужно было использовать xset -q который возвращает очень бессмысленную «маску», которая отличается для каждой раскладки клавиатуры.

Попробуйте запустить эту команду после переключения раскладки клавиатуры:

xset -q | grep -A 0 'LED' | cut -c59-67

Он должен дать вам что-то вроде «00000002» для одного макета и «00001002» для другого. Эти значения вам понадобятся позже.


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

Вот что работает на MATE:

gsettings set org.mate.peripherals-mouse cursor-theme 'DMZ-Black'

... и это, вероятно, должно работать на GNOME:

gsettings set org.gnome.desktop.interface cursor-theme 'DMZ-Black'

Если вы не знаете правильные имена для ваших тем курсора, просто переключите их с помощью GUI и проверьте:

gsettings get org.mate.peripherals-mouse cursor-theme
gsettings get org.gnome.desktop.interface cursor-theme

И теперь ... самая уродливая часть - все вместе и запускает скрипт в цикле с заданным интервалом, который изменит курсор в соответствии со значением из xset, Вот простой, который делает это:

#!/bin/bash

current=$(gsettings get org.mate.peripherals-mouse cursor-theme)
echo "STARTING WITH: $current"

while [ "true" ]; do

    xval=$(xset -q | grep -A 0 'LED' | cut -c59-67)

    if [ "$xval" == "00000002" ]; then

        if [ "$current" != "'DMZ-Black'" ]; then

            current="'DMZ-Black'"
            echo "CHANGING TO: $current"
            gsettings set org.mate.peripherals-mouse cursor-theme $current

        fi

    elif [ "$xval" == "00001002" ]; then

        if [ "$current" != "'DMZ-White'" ]; then

            current="'DMZ-White'"
            echo "CHANGING TO: $current"
            gsettings set org.mate.peripherals-mouse cursor-theme $current

        fi

    fi

    sleep 1 # one-second interval between each re-check

done

Поместите этот скрипт в некоторый файл, примените chmod +x к нему (исполняемое разрешение) и после настройки в соответствии с вашей ситуацией и тестирования в терминале (т. е. bash /home/glaz/my-dynamic-cursor-script), вы можете добавить его к вашему автозапуску и ~ VIOLA ~

Может быть, это не самое приятное решение, но это делает работу - по крайней мере для меня :)


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


3
2018-01-13 21:15



Но это изменяет только курсор мыши, а не текстовый курсор, правильно? Я понял, что речь идет о текстовых курсорах ... - Byte Commander
Вы можете изменить любой курсор, который вы хотите ... при раскрашивании текстового курсора в теме он изменит текстовый курсор. Вам просто нужно иметь файл с именем «текст» в вашей теме, поэтому в случае «DMZ» -themes вы можете просто ln -s xterm text и раскрасить «xterm». Если, конечно, ваше приложение не использует собственный пользовательский курсор ... - GreggD