Skip to content

fix: convert display-width offsets to char indices when expanding paste extmarks#28778

Closed
xodmd45-ctrl wants to merge 1 commit into
anomalyco:devfrom
xodmd45-ctrl:fix/cjk-paste-extmark
Closed

fix: convert display-width offsets to char indices when expanding paste extmarks#28778
xodmd45-ctrl wants to merge 1 commit into
anomalyco:devfrom
xodmd45-ctrl:fix/cjk-paste-extmark

Conversation

@xodmd45-ctrl
Copy link
Copy Markdown

Problem

When submitting a prompt with pasted content after typing CJK characters (Korean, Chinese, Japanese), the submitted message shows literal [Pasted\ text instead of the actual pasted content.

Root Cause

In \submitInner(), the code expands pasted text from extmarks using:

\\ s
const before = inputText.slice(0, extmark.start)
const after = inputText.slice(extmark.end)
\\

However, extmark \start/\end\ are display-width offsets (visual columns), not JS string indices. \slice()\ expects character indices. For CJK characters (visual width 2, string length 1), these diverge, causing \slice()\ to cut at wrong positions.

Fix

Add \�isualOffsetToCharIndex()\ that walks the string accumulating visual width until reaching the target offset, then returns the corresponding character index. Use it to convert extmark positions before slicing.

Related

…te extmarks

When submitting a prompt with pasted content, the code expanded extmarks
using extmark.start/end directly as slice() arguments. However, extmark
positions are display-width offsets (visual columns), not JS string indices.
For CJK characters (visual width 2), this caused slice() to cut at wrong
positions, resulting in [Pasted text appearing in the submitted message
instead of the actual pasted content.

Add visualOffsetToCharIndex() to correctly convert display-width offsets
to character indices before slicing the input text.
@github-actions github-actions Bot added the needs:compliance This means the issue will auto-close after 2 hours. label May 22, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This PR doesn't fully meet our contributing guidelines and PR template.

What needs to be fixed:

  • PR description is missing required template sections. Please use the PR template.

Please edit this PR description to address the above within 2 hours, or it will be automatically closed.

If you believe this was flagged incorrectly, please let a maintainer know.

@github-actions
Copy link
Copy Markdown
Contributor

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@github-actions
Copy link
Copy Markdown
Contributor

This pull request has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.

Feel free to open a new pull request that follows our guidelines.

@github-actions github-actions Bot removed the needs:compliance This means the issue will auto-close after 2 hours. label May 22, 2026
@github-actions github-actions Bot closed this May 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants