我在“文本输入设置”中配置了 3 种输入源(语言)。我们将它们称为 E(英语),A 和 B(其他两种语言)。我主要在英语和 A 或英语和 B 之间切换,几乎从不在 A 和 B 之间切换。但是切换键盘快捷键总是以 E->A->B 或 E<-A<-B 方向循环。这非常不方便。
我正在寻找一种方法来做到这一点,因为它是在 MacOS 下实现的,其中切换器默认在最后两种语言之间循环,但您可以使用单独的快捷方式或通过工具栏菜单强制它前进到第三种语言,如下面的屏幕截图所示:
可以在 Ubuntu 上配置类似的东西吗?
编辑:Jacob 的以下解决方案允许创建自定义快捷方式来在两种语言之间切换。我修改了他的脚本以复制 MacOS 切换方案,其中最后两种语言自动循环。你可以看到它这里. 博客文章解释细节这里。
答案1
1. 在两种(固定)语言之间切换
您所描述的基本上是用于在两种输入语言之间切换的键盘快捷键。下面的脚本将提供该选项。
#!/usr/bin/env python3
import subprocess
import sys
args = sys.argv[1:]
k = ["org.gnome.desktop.input-sources", "current"]
def get(command): return subprocess.check_output(command).decode("utf-8")
currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
newlang = args[1] if currlang == args[0] else args[0]
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])
如何使用
- 将脚本复制到一个空文件中,另存为
set_lang.py
在终端窗口中运行以下命令:
gsettings get org.gnome.desktop.input-sources sources
这将输出如下内容:
[('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl')]
此列表代表您的输入语言。指数语言的数量等于列表中的位置,以 开头
0
,('xkb', 'us')
例如指数1(就我而言)。现在测试运行脚本以在两个索引之间切换。要在
('xkb', 'us+intl')
和('xkb', 'nl')
(索引0
和2
)之间切换:python3 /path/to/set_lang.py 1 3
其中机器人语言由参数表示
1 3
如果一切正常,请将其添加到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:
python3 /path/to/set_lang.py 1 3
到您选择的快捷方式。
然后您可以使用现有的快捷方式浏览全部语言,或者(当然)菜单。
简短说明
可以通过以下命令检索可用的语言:
gsettings get org.gnome.desktop.input-sources sources
这目前设置可以通过以下命令检索语言:
gsettings get org.gnome.desktop.input-sources current
这将输出(ao)指数当前设置的语言。
我们可以放通过以下命令来控制语言:
gsettings set org.gnome.desktop.input-sources current 0
将语言设置为列表中的第一个(索引 0)
简而言之:如果我们运行脚本,我们将两种语言(索引)作为参数,脚本将查看当前索引是什么,并将切换到另一个。
2. 在最后使用的两种语言之间切换
以下脚本版本将在最后使用的两个语言,结果发现其行为与 MacOs 的行为类似。
#!/usr/bin/env python3
import subprocess
import os
k = ["org.gnome.desktop.input-sources", "current"]
stored = os.path.join(os.environ["HOME"], ".lastlang")
def get(command): return subprocess.check_output(command).decode("utf-8")
currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
try:
newlang = open(stored).read().strip()
except FileNotFoundError:
newlang = currlang
open(stored, "wt").write(currlang)
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])
我添加了此版本作为附加选项。重启后,最后使用的两种语言将保留(被记住)。
如何使用
- 将脚本复制到一个空文件中,另存为
switchlang.py
通过以下命令测试运行脚本:
python3/ path/to/switchlang.py
首次运行后,从菜单切换语言,现在运行
python3/ path/to/switchlang.py
再次。从那时起,脚本将始终在最后使用的两种语言之间切换。
答案2
答案3
在最近的 Ubuntu 版本中,默认的 GNOME 桌面就是这样的(至少在我使用Ctrl+Space快捷方式的情况下)。但在 Unity 桌面中,这仍然是一个问题……
Unity 的解决方法是使用 ibus 切换器,它提供开箱即用的 MRU 切换功能。它由 Unity 使用,通常默认随其一起安装。(如果没有,请安装它并在系统设置 -> 语言支持 -> 键盘输入法系统中进行设置。)
您可以使用 GUI 进行配置ibus-setup
(从终端运行):
- 在高级选项卡中取消选中“使用系统键盘布局”;
- 在‘输入法’选项卡中添加您的语言;
- 在“常规”选项卡中添加您的切换快捷方式。
现在,在系统设置->文本输入中删除 Unity 配置中的快捷方式,并取消勾选“在菜单栏中显示当前输入源”(无论如何它不适用于 ibus 切换器)。
现在您已全部设置完毕,它应该可以正常工作了。如果您在 ibus 中找不到您的语言(就像我遇到的英语(英国)一样)- 您可以轻松地手动添加它,请在此处查看解决方法 -https://bugs.launchpad.net/ubuntu/+source/ibus/+bug/1540587。
最后再说一句:ibus 有自己的指示器,但它很丑,而且无论如何也不会显示在 Unity 的菜单栏中,所以如果您想查看当前语言指示器,请尝试 gxkb。它将显示您当前语言的漂亮国家国旗。(您可以将 gxkb 添加到启动应用程序以在登录时自动启动。)