MonacoEditor 主动触发代码提示功能

简介: MonacoEditor是微软提供的代码编辑器 vscode即是使用它作为编辑器。 它的开发语言是ts,可以嵌入到浏览器中。   代码提示或者说代码补全功能是我们经常需要定制的部分。 目前它提供的快捷键是ctrl+space,和win10以下的操作系统的默认中英文切换是冲突的。

MonacoEditor是微软提供的代码编辑器

vscode即是使用它作为编辑器。

它的开发语言是ts,可以嵌入到浏览器中。

 

代码提示或者说代码补全功能是我们经常需要定制的部分。

目前它提供的快捷键是ctrl+space,和win10以下的操作系统的默认中英文切换是冲突的。

检查源码发现,TriggerSuggestAction的触发快捷键已经写死:

 

        function TriggerSuggestAction() {
            return _super.call(this, {
                id: 'editor.action.triggerSuggest',
                label: nls.localize(0, null),
                alias: 'Trigger Suggest',
                precondition: contextkey_1.ContextKeyExpr.and(editorCommon_1.EditorContextKeys.Writable, editorCommon_1.ModeContextKeys.hasCompletionItemProvider),
                kbOpts: {
                    kbExpr: editorCommon_1.EditorContextKeys.TextFocus,
                    primary: 2048 /* CtrlCmd */ | 10 /* Space */,
                    mac: { primary: 256 /* WinCtrl */ | 10 /* Space */ }
                }
            }) || this;
        }

 

既然没法改快捷键,它的run方法实现如下:

        TriggerSuggestAction.prototype.run = function (accessor, editor) {
            SuggestController.get(editor).triggerSuggest();
        };

 

即是说,只要有办法调用这个triggerSuggest即可,但是SuggestControll而是个私有对象,要如何调用呢?

继续看源码:

        SuggestController.get = function (editor) {
            return editor.getContribution(SuggestController_1.ID);
        };
        SuggestController.prototype.getId = function () {
            return SuggestController_1.ID;
        };

    SuggestController.ID = 'editor.contrib.suggestController';
    SuggestController = SuggestController_1 

可以得出结论

editor.getContribution('editor.contrib.suggestController').triggerSuggest

这个就是我们所需要的调用代码。

 

当然,还有一种更推荐的形式:

editor.trigger('随便写点儿啥', 'editor.action.triggerSuggest', {});

 

目录
相关文章
|
8月前
|
iOS开发 MacOS
LabVIEW如何使用热键去触发自定义的事件
LabVIEW如何使用热键去触发自定义的事件
165 1
|
8月前
|
JavaScript UED
常见的触发函数的事件(实现不同的用户体验)
常见的触发函数的事件(实现不同的用户体验)
64 0
|
JavaScript
实现 Vue 框架用户短时间内多次点击同一按钮仅触发一次
使用 Vue 框架开发项目中,遇到个问题,就是在用户提交数据时,如果连续多次点击按钮,会触发多次,导致数据异常,因此需要限制用户短时间内多次点击同一按钮,只触发一次。
1132 0
实现 Vue 框架用户短时间内多次点击同一按钮仅触发一次
|
7月前
|
编译器 API C#
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
技术心得记录:深入分析C#键盘勾子(Hook)拦截器,屏蔽键盘活动的详解
|
4月前
|
安全 网络协议 测试技术
(取消)打补丁回调 【ChatGPT】
(取消)打补丁回调 【ChatGPT】
|
7月前
|
开发工具 git
大事件项目42---怎么区分,发布还是草稿,下拉菜单的触发时机
大事件项目42---怎么区分,发布还是草稿,下拉菜单的触发时机
|
8月前
|
传感器 自然语言处理 自动驾驶
自动执行与反馈
自动执行与反馈
47 1
|
Java 编译器
即时编译的触发
即时编译的触发
|
前端开发
前端学习案例-严格模式2-对象的静默失败
前端学习案例-严格模式2-对象的静默失败
92 0
前端学习案例-严格模式2-对象的静默失败
|
JSON 前端开发 JavaScript
前端重新部署如何通知用户刷新网页?
如果后端可以配合我们的话我们可以使用webSocket 跟后端进行实时通讯,前端部署完之后,后端给个通知,前端检测到Message进行提示,还可以在优化一下使用EvnentSource 这个跟socket很像只不过他只能后端往前端推送消息,前端无法给后端发送,我们也不需要给后端发送。
191 0
前端重新部署如何通知用户刷新网页?