当垂直移动时,光标会跟踪其初始列。例如,在以下设置中:
_____________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 还是特性,甚至更不确定将其扩展到鼠标是否会有意义。
至于将相关值钻到底部以供使用,堆栈跟踪的相关信息似乎如下:
- ViewController#dispatchMouse
- ViewController#moveTo
- BaseMoveToCommand#runCoreEditorCommand (继承自 CoreEditorCommand)
- CursorMoveCommands#moveTo
第 4)个函数是最后一个可以访问鼠标列的函数,第 4)个函数将leftoverVisibleColumns
设置为硬编码的 0。
此外,ViewController 具有访问 IComputedEditorOption 的权限,因此它是实现功能切换的理想场所。
如果要通过上述调用堆栈钻取鼠标列,对我来说有两点似乎很微妙:
将鼠标列添加到 ViewController#moveTo
这是导出类的一个公共函数(可以被第三方使用)。
我看到有两种方法可以进行钻取:
- 在函数中添加可选参数:
cursorColumn: number? = null
- 为新行为创建一个新的私有函数
将参数添加到现有函数将允许具有访问 ViewController 的第三方代码设置任意光标偏移量。
将属性添加到 MoveCommandOptions
以携带列信息
- 可以将其添加到新的子接口中以避免污染其他操作
- 但其他一些操作可能会使用光标列
使用 MoveCommandOptions
(或派生)的命令有:
_moveTo
,_moveToSelect
, x1m35n
1条答案
按热度按时间fae0ux8s1#
这个功能请求现在是我们待办事项列表的候选项目。社区有60天的时间对这个问题进行投票。如果它收到20个赞成票,我们将把它移到我们的待办事项列表中。如果没有,我们将关闭它。要了解更多关于我们如何处理功能请求的信息,请参阅我们的documentation。
快乐编码!