vscode [功能请求]扩展鼠标处理,以便在点击行末时"记住"所点击的列

lo8azlld  于 7个月前  发布在  Vscode
关注(0)|答案(1)|浏览(66)

当垂直移动时,光标会跟踪其初始列。例如,在以下设置中:

_____________s____
____i
____w________c__

一个从 i 开始向下移动两次的光标
预期的行为是 c ,然后是 w
如果没有这个“列记忆”,它最终会停在 X 的位置。

功能请求

此功能请求的目标是在鼠标点击的情况下重用这种“列记忆”。
例如,使用以下设置:

____s        X
____c________f____

X 上单击鼠标后,光标将明显地设置为 s
向下移动目前会导致 c ,请求是跳到 f 而不是。
这使在错过选择长行后的键盘调整更短。
通过低精度/精度(例如眼动追踪)提高选择工具的使用效率。
内部,“列记忆”通过属性 leftoverVisibleColumns 工作。公式似乎是 initialColumn = cursor.column + cursor.leftoverVisibleColumns ?
区分两种光标位置:“模型”(实际文本位置)和“视觉”(编辑器内(似乎考虑到了换行和插入的文本))。
从我的有限测试来看,将视觉位置的 leftoverVisibleColumns 设置为 mouseColumn - visualColumn 就足以处理这种行为。

边缘情况:点击文本区域下方

有一个边缘情况,即点击最后一行下方:
光标会被移动到文本末尾,mouseColumn - visualColumn 变为负数。
负值似乎会在下一次垂直移动时将光标向后拖动几个字符。
(输入:先点击 'X',然后向上移动一次):

____f__c_
_______s

    X

( X : 点击位置, s : 光标视觉位置, f : 在向上移动负数 leftoverVisibleColumns 后,光标的位置, c : 目前的行为)
这是一个奇怪的行为,但与键盘的行为相差无几:

___s______e___
___1______2

s 开始:

  • 向下移动两次,然后向上移动一次: s , 1 , 2 , s
  • 向下移动三次,然后向上移动一次: s , 1 , 2 , 2 , e

不确定是否是 bug 还是特性,甚至更不确定将其扩展到鼠标是否会有意义。
至于将相关值钻到底部以供使用,堆栈跟踪的相关信息似乎如下:

  1. ViewController#dispatchMouse
  2. ViewController#moveTo
  3. BaseMoveToCommand#runCoreEditorCommand (继承自 CoreEditorCommand)
  4. CursorMoveCommands#moveTo
    第 4)个函数是最后一个可以访问鼠标列的函数,第 4)个函数将 leftoverVisibleColumns 设置为硬编码的 0。
    此外,ViewController 具有访问 IComputedEditorOption 的权限,因此它是实现功能切换的理想场所。
    如果要通过上述调用堆栈钻取鼠标列,对我来说有两点似乎很微妙:

将鼠标列添加到 ViewController#moveTo

这是导出类的一个公共函数(可以被第三方使用)。
我看到有两种方法可以进行钻取:

  • 在函数中添加可选参数: cursorColumn: number? = null
  • 为新行为创建一个新的私有函数

将参数添加到现有函数将允许具有访问 ViewController 的第三方代码设置任意光标偏移量。

将属性添加到 MoveCommandOptions 以携带列信息

  • 可以将其添加到新的子接口中以避免污染其他操作
  • 但其他一些操作可能会使用光标列

使用 MoveCommandOptions (或派生)的命令有:

  • _moveTo , _moveToSelect , x1m35n
fae0ux8s

fae0ux8s1#

这个功能请求现在是我们待办事项列表的候选项目。社区有60天的时间对这个问题进行投票。如果它收到20个赞成票,我们将把它移到我们的待办事项列表中。如果没有,我们将关闭它。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation
快乐编码!

相关问题