// Register the callback function as a command
var commandId = editor.addCommand(
-1,
function (_, ...args) {
// Callback that will be executed when the user selects option
console.log('user selected:', args);
},
""
);
然后按照正常方式配置completionProvider:
function createDependencyProposals(range) {
// returning a static list of proposals, not even looking at the prefix (filtering is done by the Monaco editor),
// here you could do a server side lookup
return [
{
label: 'item 1',
kind: monaco.languages.CompletionItemKind.Function,
documentation: "This is item 1.",
insertText: 'item 1',
range: range,
command: {
id: commandId, // ID of the command of the callback function
title: "commandTitle",
arguments: ['item 1']
}
},
{
label: 'item 2',
kind: monaco.languages.CompletionItemKind.Function,
documentation: "This is item 2.",
insertText: 'item 2',
range: range,
command: {
id: commandId, // ID of the command of the callback function
title: "commandTitle",
arguments: ['item 2']
}
},
];
}
monaco.languages.registerCompletionItemProvider("json", {
provideCompletionItems: function (model, position) {
var word = model.getWordUntilPosition(position);
var range = {
startLineNumber: position.lineNumber,
endLineNumber: position.lineNumber,
startColumn: word.startColumn,
endColumn: word.endColumn,
};
return {
suggestions: createDependencyProposals(range),
};
},
});
这里要注意的重要一点是,每个完成项定义了一个command属性:
command: {
id: commandId, // ID of the command of the callback function
title: "commandTitle",
arguments: ['item 2']
}
1条答案
按热度按时间but5z9lq1#
有一种方法可以做到这一点,注册一个command,然后通过CompletionItem上的command属性调用它。
您可以注册操作(定义一个回调函数,在选择该项时执行该函数):
然后按照正常方式配置
completionProvider
:这里要注意的重要一点是,每个完成项定义了一个
command
属性:id
是您注册的命令的ID,该命令包含您希望在用户选择建议时执行的回调函数。arguments
可以是任何你想要的,但是你可能需要传递一些东西来表明他们选择了哪个建议,否则你将无法在回调函数中告诉。有一个工作演示(演示使用您在问题
0.17.1
中提到的相同版本,但也应该适用于Monaco的后续版本)。如果打开开发人员工具的控制台选项卡,然后键入字母i
并选择一个选项,您应该会看到类似于以下内容的内容记录到控制台:用户选择:[“项目1”]