You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GNOME扩展中捕获键盘语言切换事件?

如何在GNOME扩展中捕获键盘语言切换事件?

我来帮你搞定这个问题!要在GNOME扩展里捕获键盘语言切换的事件,我们可以利用GNOME Shell内置的Shell.InputSourceManager来实现,它会在当前激活的键盘语言(输入源)变化时发出对应的信号。下面是调整后的完整代码示例,我会一步步给你解释:

首先,我们需要在扩展的enable方法中获取输入源管理器的实例,然后监听它的active-source-changed信号;同时别忘了在disable方法中移除监听,避免内存泄漏。

修改后的完整代码:

/* SPDX-License-Identifier: GPL-2.0-or-later */

/* exported init */

const { Shell } = imports.gi;

class Extension {
    constructor() {
        this._inputSourceManager = null;
        this._languageChangedHandler = null;
    }

    enable() {
        // 获取输入源管理器实例
        this._inputSourceManager = Shell.InputSourceManager.get_default();
        
        // 监听输入源切换事件
        this._languageChangedHandler = this._inputSourceManager.connect(
            'active-source-changed',
            () => {
                // 获取当前激活的输入源(键盘语言)
                const currentSource = this._inputSourceManager.current_source;
                // 获取语言名称,你也可以获取其他属性比如id等
                const languageName = currentSource.get_display_name();
                
                // 打印日志,验证事件触发
                log(`Language was changed and now = ${languageName}`);
            }
        );
    }

    disable() {
        // 移除事件监听
        if (this._languageChangedHandler) {
            this._inputSourceManager.disconnect(this._languageChangedHandler);
            this._languageChangedHandler = null;
        }
        this._inputSourceManager = null;
    }
}

function init() {
    return new Extension();
}

关键点说明:

  • 首先导入Shell这个GI模块,因为InputSourceManager属于它的API;
  • 在构造函数里初始化两个变量,用来保存管理器实例和事件句柄,方便在disable时清理;
  • active-source-changed信号会在每次键盘语言切换时触发,回调函数里通过current_source获取当前激活的输入源,再用get_display_name()拿到易读的语言名称;
  • 一定要在disable方法中断开信号连接并清空变量,这是GNOME扩展开发的最佳实践,防止内存泄漏。

如果你只是想简单监听切换动作,不需要获取具体语言信息,也可以简化回调函数的内容,只保留日志或者你需要执行的逻辑就行。

备注:内容来源于stack exchange,提问作者Ilya Startsev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:52:56