是否可以在键盘光标上(或其附近)显示一些输入语言的指示,或者根据输入语言改变光标颜色?
我认为对于使用多种语言输入的人来说这将是一个很好的补充。
答案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~
也许不是最好的解决方案,但它确实有效 - 至少对我来说:)
哦……当您使用该功能时,它也能工作,该功能允许每个窗口使用不同的输入布局,因此当您将焦点移到不同的窗口时,光标也会更新。但是,它不适用于使用自己的自定义光标的应用程序 - 这种情况需要您有其他想法:实时跟踪光标并在其旁边渲染一些覆盖层,但我认为这并不那么简单……它可能需要编写一些专门的应用程序/守护程序来执行此操作。