Skip to content

test(terminal): 소프트랩 복사 진단 — 이미 정상, 회귀 테스트 추가#32

Merged
dancinlife merged 1 commit into
void/mainfrom
void/fix-softwrap-copy
May 30, 2026
Merged

test(terminal): 소프트랩 복사 진단 — 이미 정상, 회귀 테스트 추가#32
dancinlife merged 1 commit into
void/mainfrom
void/fix-softwrap-copy

Conversation

@dancinlife
Copy link
Copy Markdown
Contributor

진단 판정 (verdict): 코드는 이미 정상 — 동작 변경 없음

소프트랩(terminal auto-wrap · "줄내림")된 한 줄을 복사하면 wrap 지점마다 하드
개행이 끼어든다는 제보를 DIAGNOSE-FIRST 원칙으로 조사했습니다. 결론:
void 의 복사 경로는 이미 소프트랩을 한 줄로 재결합하며, 실제 하드 개행(\n)만
보존합니다.
코드 결함을 재현할 수 없었습니다.

근거 (증거 기반)

복사 경로 두 곳 모두 unwrap = true:

  • src/terminal/Screen.zig selectionString (~2474): .unwrap = true
  • src/Surface.zig copySelectionToClipboards (~2224): .unwrap = true

재결합 로직 src/terminal/formatter.zig (~1114):

if (!row.wrap or !self.opts.unwrap) blank_rows += 1;

unwrap=true + row.wrap=true(소프트랩된 행) → 두 조건 모두 거짓 → 개행
미삽입. 정상. 실제 하드 개행이 있는 행만 row.wrap=false 이라 개행이 1개
추가됩니다.

테스트 출력 (verbatim)

$ zig build test -Dversion-string=1.4.1-dev -Dtest-filter="selectionString" --summary all
Build Summary: 59/59 steps succeeded; 82/82 tests passed
+- run test void-test 82 passed

$ zig build test -Dversion-string=1.4.1-dev -Dtest-filter="soft-wrapped" --summary all
Build Summary: 59/59 steps succeeded; 75/75 tests passed

$ zig build test -Dversion-string=1.4.1-dev -Dtest-filter="soft wrap" --summary all
Build Summary: 59/59 steps succeeded; 74/74 tests passed

기존 \"Screen: selectionString soft wrap\" 포함 전부 통과. 신규 회귀 테스트
2건도 통과(82 = 기존 80 + 신규 2).

변경 사항

동작 변경 없음. 제보 시나리오를 못박는 회귀 테스트 2건만 추가
(src/terminal/Screen.zig):

  • \"Screen: selectionString soft wrap multi-row rejoin\" — 5-col 화면에 15자를
    써서 3개 visual row 로 소프트랩된 한 줄을 전체 선택 → ABCDEFGHIJKLMNO
    (개행 미삽입) 기대.
  • \"Screen: selectionString soft wrap then hard newline\" — 소프트랩 한 줄 +
    실제 \n + 다음 줄 → 소프트랩은 재결합, 하드 개행은 보존
    (ABCDEFGHIJ\nKLM) 기대.

CHANGELOG.md 에 진단 결과를 정직하게 기록.

추정 원인 (코드 외부)

void 복사 경로 자체는 올바르므로, 제보된 증상은 다음 중 하나로 추정됩니다:

  1. 복사한 원본 텍스트에 프로그램이 실제로 emit 한 하드 개행이 들어있었음
    (즉 복사가 실제로는 정확함).
  2. 다른 터미널/앱에서 복사했거나, 다른 설정(예: 타 터미널의 wrap 정책).

clipboard-trim-trailing-spaces 기본값 true 는 trailing 공백만 제거하며
wrap 개행 삽입과 무관 — 원인 아님.

빌드 노트 (인프라)

zig build(인자 없이)는 현재 build.zig.zon 버전(0.0.0-void.1.4.1-dev)과
HEAD 의 git tag v1.4.1 불일치로 src/build/Config.zig:278 에서 panic 합니다
("tagged releases must be in vX.Y.Z format matching build.zig"). 이는
라우팅 문제가 아니라
버전-스킴 mismatch 입니다(별도 pool 체크아웃 없음 —
/Users/mini/coredancinlab 심링크, 동일 inode). 빌드는
-Dversion-string=1.4.1-dev 로 우회하여 테스트했습니다. 빌드 파일은 다른
에이전트 작업과 겹치므로 이 PR 에서 건드리지 않았습니다. 별도 추적 권장.

릴리스 필요 여부

불필요. 사용자-대면 동작 변경이 없으므로 v1.4.2 릴리스는 정당화되지
않습니다 (테스트/문서만 추가).

🤖 Generated with Claude Code

소프트랩("줄내림")된 한 줄을 복사하면 wrap 지점마다 하드 개행이 끼어든다는
제보를 진단한 결과, 복사 경로는 이미 올바르게 동작함을 확인.

- Screen.selectionString / Surface.copySelectionToClipboards 둘 다
  unwrap = true 로 호출 → 소프트랩 재결합 활성.
- formatter.zig wrap 로직(`if (!row.wrap or !self.opts.unwrap) blank_rows += 1;`)
  도 정상: unwrap=true + row.wrap=true 이면 개행 미삽입.
- selectionString 필터 82/82 통과(신규 2건 포함), 코드 결함 재현 불가.

동작 변경 없음. 제보 시나리오를 못박는 회귀 테스트 2개만 추가:
- "selectionString soft wrap multi-row rejoin": 3-로우 소프트랩 한 줄이
  개행 없이 ABCDEFGHIJKLMNO 로 재결합.
- "selectionString soft wrap then hard newline": 소프트랩은 재결합하되
  실제 하드 개행 \n 은 보존.

원인은 사용자 텍스트의 실제 하드 개행 또는 타 터미널 설정으로 추정.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@dancinlife dancinlife merged commit 0d13ce1 into void/main May 30, 2026
93 of 96 checks passed
@dancinlife dancinlife deleted the void/fix-softwrap-copy branch May 30, 2026 18:49
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.

1 participant