公开 VSCode 活动“when 子句上下文”的方法

The*_*ast 6 visual-studio-code vscode-extensions

我正在寻找一种方法来公开 VSCode活动的“when 子句上下文”,例如“explorerResourceIsFolder”。为了让您更好地理解我的用例,以下是正在开发 VSCode 扩展的项目的一些背景信息。我的扩展将有助于通过语音在 VSCode 中进行编程和控制。

Caster 是一个基于 Dragonfly 的语音编程工具包。Dragonfly 是一个语音识别框架。它是一个 Python 包,提供高级对象模型,并允许用户轻松编写使用语音识别的脚本、宏和程序。这些项目背后的目标是让那些与键盘或鼠标交互受限的人能够进行编程或让开发人员提高生产力。

Caster 和 Dragonfly 当前的一些突出限制都是通过模拟击键进行交互的。这只是举几个问题。

  • 不同系统配置和 IDE 版本的 IDE 性能可靠性。这引入了命令执行延迟等变量。
  • Caster完全不知道IDE环境。
  • Dragon NaturallySpeaking 对语法有复杂性上限。达到限制后,将出现 BadGrammar 错误。
  • 键盘组合有限,并非所有功能都可以通过快捷键调用。

Adom 编辑器的一些示例

  1. find in buffer": R(Key("cf"), rdescript="Atom: Find in Buffer") 只有少数相关命令在“Find in Buffer”上下文中有用,但 Caster 命令是全局性的,这会降低命令语音识别的准确性并增加语法复杂性。与 Caster IDE 集成将允许指定到 IDE 上下文或焦点的有限命令集。
  2. “分割成行”: R(Key("cs-p") + Text("分割成行") + Pause(atom_palette_wait) + Key("enter"), rdescript="Atom: 分割成行"), Not所有 IDE 功能都可以通过快捷方式调用,或者可以在 Caster 中轻松地重新创建。我尝试在 adom 中解决这个问题是利用命令面板。虽然这扩展了我触发命令的能力,但它引入了延迟。禁食会触发错误的命令。太慢会降低生产率。索引延迟基于系统负载、系统规格、活动插件数量以及每个命令的字符数。我们尝试使用 Pause(atom_palette_wait) 来缓解这一问题,但延迟中的变量太复杂。Studio Code 也是如此。

Caster框架IDE集成

  • Caster 将包含 IDE 函数,以传递给 IDE 插件/扩展来执行。例如“查找”: find R(SendFunction("actions.find"), rdescript="VisualStudioCode: Find")

  • Caster 会监听 IDE 宣布的上下文或焦点。

  • Caster 将根据 IDE 上下文或焦点存储命令和函数。然后根据 IDE 宣布的焦点,仅激活包含快捷方式或 IDE 功能的相关命令。

IDE 插件/扩展框架

  • 监听并执行来自 Caster 的 IDE 特定函数

  • 向 Caster 宣布当前情况或焦点

  • 作为扩展 IDE 功能的长期目标(例如,在 Visual Studio Code 中将数字添加到 IntelliSense 列表),用户将说出数字,然后将选择并执行适当的行。


Studio Code Extension 将分为三个部分。

  1. 运行服务器和客户端的 Websocket,允许与 Caster 进行双向通信。
  2. 执行“Command_id”的函数,例如“editor.debug.action.toggleBreakpoint”正在进行中 - 即将完成
  3. 公开编辑器“when Clause Contexts”的方法,例如“explorerResourceIsFolder” - 搜索方法 - 迄今为止通过 API 运气不佳 - 搜索源代码以了解实现。

欢迎大家提出意见。如果您认为值得在 VSCode 存储库上打开 github 票证,请告诉我。

小智 5

有一个非公共 API 用于获取何时上下文生效。您可以使用getValue(key: string)。可以从本期票证的工作中获得:

Lift setContext from a command to proper API Microsoft/vscode#10471

and the source can be viewed here:

contextKeyService.ts

by using getValue(key: string)

It is still work in progress as of May 2017. Thank you. Good day.