Skip to content

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

Merged
ksqsf merged 1 commit intomasterfrom
navigator-stop-before-delimiter
Apr 20, 2026
Merged

feat(navigator): 允許跳轉到分隔符之前#1142
ksqsf merged 1 commit intomasterfrom
navigator-stop-before-delimiter

Conversation

@ksqsf
Copy link
Copy Markdown
Member

@ksqsf ksqsf commented Feb 28, 2026

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

navigator:
  syllable_jump_position: before_delimiter | after_delimiter

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

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

ksqsf commented Mar 4, 2026

ping @lotem
any idea?

@ksqsf
Copy link
Copy Markdown
Member Author

ksqsf commented Mar 6, 2026

for a possible fix see #1147

@lotem
Copy link
Copy Markdown
Member

lotem commented Mar 8, 2026

好厲害。我支持。

@ksqsf
Copy link
Copy Markdown
Member Author

ksqsf commented Mar 8, 2026

好厲害。我支持。

review 一下?

Comment thread src/rime/gear/navigator.cc Outdated
Comment thread src/rime/gear/navigator.cc Outdated
Comment thread src/rime/gear/navigator.cc Outdated
Comment thread src/rime/gear/navigator.cc Outdated
@ksqsf
Copy link
Copy Markdown
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 的集合,而是点和区间的集合,区间可以被视同一个点。

@ksqsf ksqsf force-pushed the navigator-stop-before-delimiter branch 2 times, most recently from bd79a3d to cd1f904 Compare April 18, 2026 16:33
@ksqsf
Copy link
Copy Markdown
Member Author

ksqsf commented Apr 18, 2026

@lotem should be ready now

@ksqsf ksqsf force-pushed the navigator-stop-before-delimiter branch 3 times, most recently from 147b93e to c9d4993 Compare April 18, 2026 18:46
@lotem
Copy link
Copy Markdown
Member

lotem commented Apr 19, 2026

我忽然有個靈感:

在方案中定義「前置」「後置」分隔符,據此自動跳轉到合適的位置。

size_t new_pos =
// 跳過未翻譯的輸入碼
(caret_pos > end_of_translation) ? end_of_translation
(span_start_pos > end_of_translation) ? end_of_translation
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

考察:

[translated]'^untranslated

^ 爲光標位置,若跳轉規則爲 BeforeDelimiter,則 (span_start_pos > end_of_translation)(caret_pos > end_of_translation) 結果不同,是否改變最終結果?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

似乎結果還是一樣的。

Copy link
Copy Markdown
Member

@lotem lotem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

你考慮考慮,有沒有必要定義「前置」「後置」分隔符。
這個做法也行。

@ksqsf
Copy link
Copy Markdown
Member Author

ksqsf commented Apr 19, 2026

分設前置後置的話,就有可能兩種都設置,要處理起來感覺有點複雜。

@lotem
Copy link
Copy Markdown
Member

lotem commented Apr 20, 2026

分設前置後置的話,就有可能兩種都設置,要處理起來感覺有點複雜。

好~

@lotem
Copy link
Copy Markdown
Member

lotem commented Apr 20, 2026

syllable_end 表達的意思不太清楚。這個別名沒必要。

@ksqsf ksqsf force-pushed the navigator-stop-before-delimiter branch from c9d4993 to 03a0120 Compare April 20, 2026 08:03
@ksqsf ksqsf merged commit 2b7ccf2 into master Apr 20, 2026
20 checks passed
@ksqsf ksqsf deleted the navigator-stop-before-delimiter branch April 20, 2026 08:57
boomker added a commit to boomker/librime that referenced this pull request Apr 29, 2026
feat(poet): make multiple sentences

feat(navigator): 允許跳轉到分隔符之前 (rime#1142)
fix(build): commit ci should also build with plugins (rime#1160)
feat(syllabifier): trim leading delimiters (rime#1147)
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