键盘光标上的输入语言指示器(或光标颜色)

键盘光标上的输入语言指示器(或光标颜色)

是否可以在键盘光标上(或其附近)显示一些输入语言的指示,或者根据输入语言改变光标颜色?

我认为对于使用多种语言输入的人来说这将是一个很好的补充。

答案1

这当然是可能的,但是我想出的解决方案非常……丑陋。

首先,您需要创建自己的光标主题和颜色。您可以将已有的主题/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它(可执行权限),根据您的情况进行相应配置并在终端(fe bash /home/glaz/my-dynamic-cursor-script)中测试后,您可以将其添加到自动启动中,然后~VIOLA~

也许不是最好的解决方案,但它确实有效 - 至少对我来说:)


哦……当您使用该功能时,它也能工作,该功能允许每个窗口使用不同的输入布局,因此当您将焦点移到不同的窗口时,光标也会更新。但是,它不适用于使用自己的自定义光标的应用程序 - 这种情况需要您有其他想法:实时跟踪光标并在其旁边渲染一些覆盖层,但我认为这并不那么简单……它可能需要编写一些专门的应用程序/守护程序来执行此操作。

相关内容