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

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

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

3
задан 13 January 2018 в 22:57

1 ответ

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

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

Что касается раскраски курсоров, вы можете сделать это с помощью GIMP и его функции / фильтра «colorize», но вы должны применить его ко всем слоям (разных размеров), а затем экспортировать эти файлы с расширением .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'

Если вы не знаете собственных имен для тем курсора просто переключите их с помощью графического интерфейса и проверьте:

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
ответ дан 13 January 2018 в 22:57

Другие вопросы по тегам:

Похожие вопросы: