【问题标题】:Visual Studio Code Extensions : How to stop firing onDidChangeTextEditorSelection events while dragging mouse?Visual Studio 代码扩展:如何在拖动鼠标时停止触发 onDidChangeTextEditorSelection 事件?
【发布时间】:2018-02-23 17:00:15
【问题描述】:

我目前正在开发一个行解析扩展,它根据当前选定的行执行任务,并在用户更改选择时重新解析。

当用户选择多行时更新是没有意义的,所以一切都会在一个看起来像这样的块内触发:

if(editor.selection.isSingleLine){
    // Line Handling Here
}

但是,当用户拖动鼠标以选择他们想要的文本时,会发生事件周期性触发,因为从技术上讲,当用户在文本上拖动时,他们正在“选择”他们打算在在那里,其中一些只包含他们开始拖动的线。

它也会为双击解析两次,但这可能没问题,因为无论如何选定的单词都在同一行上。

对于键盘和命令,它的行为符合预期,但我希望它仅在单击(重新定位光标)或用户完成拖动选择后触发。

这可能不是问题,因为最后一个选择将最后执行,我可以一起破解一些东西来使用它,但这似乎不优雅并且可能导致性能极差,因为行检查会重复执行。

编辑:如果是多行选择,我实际上想做其他事情,所以我确实希望能够获得最终选择。

【问题讨论】:

    标签: javascript visual-studio-code vscode-extensions


    【解决方案1】:

    该事件是全局的,并且在所有扩展程序之间共享。因此,单个扩展无法配置它。为了处理“事件雪崩”,应该使用去抖动。不要在事件处理程序内部执行工作,而是安排它尽快完成并取消可能安排的操作。像这样

    让处理; 功能doWorkNow(){ // 解析选中的内容 } onDidChangeTextEditorSelection(() => { 清除超时(句柄); 句柄 = setTimeout(() => doWorkNow(), 10); });

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2012-01-26
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多