Статический порядок переключения раскладки клавиатуры в Ubuntu 17.10 и более поздних версиях с GNOME 3
Только что установил Ubuntu 17.10 и похоже, что переключение раскладки клавиатуры изменило его поведение.
В предыдущей версии Ubuntu (например, 16.04 Unity), если у меня есть 3 разных раскладки клавиатуры (например, EN-TH-JA), нажатие Super+Space всегда будет циклически переходить к следующей раскладке в том же порядке (например, от EN к TH в JA, затем обратно в EN).
Однако, начиная с Ubuntu 17.10, это уже не так. Он перебирает макет в порядке MRU ("Последние использованные"). Итак, предположим, что макет начинается с EN, а затем я переключился на TH. В следующий раз, когда я нажму Super+Space, это даст мне EN вместо JA.
Я попытался выкопать и обнаружил, что виновником являются недавно реализованные настройки DCONF внутри org.gnome.desktop.input-sources
и, кажется, нет способа изменить это поведение.
Итак, мой вопрос: есть ли способ изменить это поведение на "статическое упорядочение" переключения раскладки клавиатуры?
(Как примечание, новое поведение очень плохое, когда у нас есть три или более макетов. Большую часть времени мы, как пользователь, не могли вспомнить макеты MRU, поэтому переключение макетов очень неудобно и намного медленнее, чем уже зная, что следующий макет будет, если используется статический порядок.)
Если нет параметров для изменения этого поведения, где я должен сообщить об этом как об ошибке или запросе функции?
2 ответа
В качестве обходного пути вы можете установить альтернативное сочетание клавиш, такое как alt+shift, для переключения между раскладками клавиатуры (см. Этот вопрос для справки: Ubuntu 17.10 не может изменить сочетание клавиш ввода на alt+shift).
Этот ярлык должен соответствовать "статическому порядку", который вы ищете.
Запрос функции был подан OP здесь.
D-Bus API GNOME 3 предлагает
org.gnome.Shell.Eval
метод для выполнения произвольного JavaScript, и, таким образом, мы можем исправить код так, чтобы он не менял порядок.
Вот скрипт, который работает в 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"