刚刚安装了 Ubuntu 17.10,似乎键盘布局切换已经改变了其行为。
在以前的 Ubuntu 版本(例如 16.04 Unity)中,如果我有 3 种不同的键盘布局(例如EN-頓-JA), 击中Super+Space会总是按相同顺序循环到下一个布局(例如EN到頓到JA然后回到EN)。
然而从 Ubuntu 17.10 开始,这种情况不再存在。它会循环显示毛里求斯大学 (最近使用)排序。假设布局以EN然后我骑车去頓。下次我按Super+时Space,它会给我EN代替JA。
我尝试深入挖掘,发现罪魁祸首是里面新实施的 DCONF 设置org.gnome.desktop.input-sources
,而且似乎没有办法改变这种行为。
所以我的问题是:有没有办法将这种行为改变为“静态排序”键盘布局切换?
(顺便说一句,当我们有三个或更多布局时,新的行为非常糟糕。大多数时候,作为用户,我们无法记住毛里求斯大学布局切换非常不方便,慢得多而不是已经知道如果使用静态排序的话下一个布局会是什么。)
如果没有设置可以改变这种行为,我应该在哪里将其报告为错误或功能请求?
答案1
作为一种解决方法,您可以设置备用键盘快捷键(如alt+)shift来在键盘布局之间切换(请参阅此问题以供参考:Ubuntu 17.10 无法将输入切换快捷键更改为 alt+shift)。
此快捷方式应遵循您所寻找的“静态排序”。
OP 已提交功能请求这里。
答案2
GNOME 3 的 D-Bus API 提供了org.gnome.Shell.Eval
执行任意 JavaScript 的方法,因此我们可以对代码进行 monkey-patch 以不改变顺序。
这是一个适用于 GNOME 40(Ubuntu 21.10)的脚本:
#!/usr/bin/bash
read -r -d '' patch_script << '{ENDOFMSG}'
Object.getPrototypeOf(imports.ui.status.keyboard.getInputSourceManager())._currentInputSourceChanged = function () {
let oldSource;
[oldSource, this._currentSource] = [this._currentSource, newSource];
this.emit('current-source-changed', oldSource);
// for (let i = 1; i < this._mruSources.length; ++i) {
// if (this._mruSources[i] == newSource) {
// let currentSource = this._mruSources.splice(i, 1);
// this._mruSources = currentSource.concat(this._mruSources);
// break;
// }
// }
this._changePerWindowSource();
}
{ENDOFMSG}
gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval "$patch_script"