如何防止 gnome 在切换语言时改变语言输入顺序?

如何防止 gnome 在切换语言时改变语言输入顺序?

这是我的输入设置(请注意列表中语言的顺序,这是我的偏好。)

在此处输入图片描述

现在最初当我调用快捷方式来切换输入时,列表看起来像这样(如预期的那样):

在此处输入图片描述

现在我选择韩语输入(第二项)并再次调用切换快捷方式,列表如下所示:

在此处输入图片描述

如您所见,顺序已更改。
现在,如果我选择另一个输入并尝试再次切换,列表将完全移动。

有没有办法可以防止 gnome 一直重新排列列表?

我认为值得一提的是,我的工作与语言有关,我经常切换语言(搜索中文字符,返回英文键盘,返回韩语词典查找定义等),我发现大脑更容易记住列表中语言的位置,而不是实际写的内容,这就是 Windows 的做法。
我希望有办法解决这个问题,如果没有,我将不得不在 gnome 网站上报告此问题。

提前致谢。

答案1

因为,目前还没有 gnome-shell-extension 用于使用默认快捷键 Super+Space 和 Shift+Super+Space 静态切换键盘布局。

以及关于此链接的评论Ubuntu 17.10 及更高版本中使用 GNOME 3 进行键盘布局切换的静态排序来自 OP

链接中提出的解决方案(Alt+Shift)的问题在于它缺乏视觉反馈,并且无法使用快捷键返回上一个输入(例如 win+shift+space 返回上一个输入)。所以它并不令人满意。

通过以下解决方法,我至少可以实现两点中的一点(视觉反馈和切换回以前的布局)。

解决方法

操作系统:Ubuntu 19.10

参考:操作默认快捷键 Super+Space 以切换到下一个输入源,无需图形表示

创建两个脚本,内容如下,我将其命名为“SuSpace.sh”和“ShSuSpace.sh”

苏空间

#!/bin/bash

totalLang=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources.length" | grep -oP "(?<=').*?(?=')")

currentLang=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index" | grep -oP "(?<=').*?(?=')")

declare -i math=$currentLang+1

if [ "$math" -lt "$totalLang" ]; then
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources["$currentLang+1"].activate()"
else
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"
fi

舒空间

#!/bin/bash

totalLang=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager()._mruSources.length" | grep -oP "(?<=').*?(?=')")

currentLang=$(gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().currentSource.index" | grep -oP "(?<=').*?(?=')")

declare -i math=$currentLang-1

if [ "$math" -eq -1 ]; then
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources["$totalLang-1"].activate()"
else
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "imports.ui.status.keyboard.getInputSourceManager().inputSources["$currentLang-1"].activate()"
fi

您可以根据自己的意愿为这两个脚本创建自定义快捷方式。

在此处输入图片描述

相关内容