这是我的输入设置(请注意列表中语言的顺序,这是我的偏好。)
现在最初当我调用快捷方式来切换输入时,列表看起来像这样(如预期的那样):
现在我选择韩语输入(第二项)并再次调用切换快捷方式,列表如下所示:
如您所见,顺序已更改。
现在,如果我选择另一个输入并尝试再次切换,列表将完全移动。
有没有办法可以防止 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
您可以根据自己的意愿为这两个脚本创建自定义快捷方式。