Skip to content

feat(navigator): 允許跳轉到分隔符之前#1142

Open
ksqsf wants to merge 5 commits intomasterfrom
navigator-stop-before-delimiter
Open

feat(navigator): 允許跳轉到分隔符之前#1142
ksqsf wants to merge 5 commits intomasterfrom
navigator-stop-before-delimiter

Conversation

@ksqsf
Copy link
Member

@ksqsf ksqsf commented Feb 28, 2026

增加 navigator/stop_before_delimiter 允許跳轉時停止到分隔符之前。

即輸入 ni'hao,按 tab 後直接跳轉到 ni 之後、 ' 之前,允許快速修改爲 nin、ning 等其他音節。

目前有個問題:如果在 ' 之前選中候選,後面的 ' 會被保留在輸入之中,當作符號輸出。可能這個思路不太可行,可以先討論討論。

@ksqsf ksqsf requested a review from lotem February 28, 2026 13:59
@ksqsf
Copy link
Member Author

ksqsf commented Mar 4, 2026

ping @lotem
any idea?

@ksqsf
Copy link
Member Author

ksqsf commented Mar 6, 2026

for a possible fix see #1147

@lotem
Copy link
Member

lotem commented Mar 8, 2026

好厲害。我支持。

@ksqsf
Copy link
Member Author

ksqsf commented Mar 8, 2026

好厲害。我支持。

review 一下?

@ksqsf
Copy link
Member Author

ksqsf commented Mar 9, 2026

这个变更影响了不少 navigator 操作的语义,现尝试统一一下各操作的处理。结合 #1147 的变更,一个 span 现在由 4 个坐标定义:

  • start: 在输入串里的起始位置
  • leading_delim_end: 起始分隔符(只在已确认段之后的第一个待选段出现)
  • trailing_delim_start: 末尾分隔符起始位置
  • end: 结束位置

满足 start ≤ leading_delim_end < trailing_delim_start ≤ end。spans 只记录 start 和 end 作为 vertex,delim 的位置在跳转操作时实时推断。

(当 stop_before_delimiter 为 true 时)若 caret 在 [trailing_delim_start, end) 区间内,则将其认同为 end,从而与 BeginMove 计算的 vertex 对应。效果是 [ni]''hao[ni']'hao[ni'']hao 处按 right 都可以直接跳转到末尾(假设当前 spans.end == input.length())。

虽然能用,不过感觉不是很优雅,或许直接改 span 定义更好:spans 不是 vertex 的集合,而是点和区间的集合,区间可以被视同一个点。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants