Skip to content

feat: Alt/Option+Arrow 단어 단위 커서 이동 (#223)#794

Closed
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/word-movement
Closed

feat: Alt/Option+Arrow 단어 단위 커서 이동 (#223)#794
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/word-movement

Conversation

@oksure

@oksure oksure commented May 11, 2026

Copy link
Copy Markdown
Contributor

요약

macOS 표준 단어 이동 단축키 구현:

  • Option+←/→: 단어 단위 커서 이동
  • Option+Shift+←/→: 단어 단위 선택 확장
  • Option+Backspace: 이전 단어 삭제
  • Option+Delete: 다음 단어 삭제

구현

  1. CursorState.moveToWordBoundary(direction) — 단어 경계 탐색 후 커서 이동
  2. 문자 클래스 기반 경계 탐지 (한글/영문/숫자/공백/구두점 5종)
  3. 본문 및 표 셀 내부 모두 지원 (getTextRange / getTextInCell 활용)
  4. Alt 단축키 핸들러에서 Arrow 키 제외 가드 추가

문자 클래스 경계 규칙

  • 같은 클래스 문자열을 하나의 "단어"로 취급
  • 전진 시: 현재 단어 끝 + 후행 공백 건너뜀
  • 후진 시: 선행 공백 건너뜀 + 이전 단어 시작까지

테스트

  • cargo test + cargo clippy 통과
  • TypeScript 타입 검사 통과 (WASM 모듈 제외 기존 에러만)

감사합니다.

macOS Option+Arrow (단어 이동), Option+Shift+Arrow (단어 선택),
Option+Backspace/Delete (단어 삭제) 구현.

- CursorState.moveToWordBoundary() 메서드 추가
- 한글/영문/숫자/공백/구두점 문자 클래스 기반 경계 탐지
- 본문 및 표 셀 내부 모두 지원
- Alt+Arrow가 기존 Alt 단축키 핸들러에 잡히지 않도록 가드 추가
Copilot AI review requested due to automatic review settings May 11, 2026 00:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

macOS 표준 단어 단위 편집 단축키(Option/Alt + Arrow/Backspace/Delete)를 rhwp-studio 편집기 커서/키보드 입력 처리에 추가하는 PR입니다.

Changes:

  • Alt/Option+ArrowLeft/Right로 단어 경계 단위 커서 이동 및 Shift 조합 시 선택 확장 추가
  • Alt/Option+Backspace/Delete로 이전/다음 “단어” 삭제 동작 추가
  • CursorState.moveToWordBoundary() 및 문자 클래스 기반 단어 경계 탐색 유틸 추가

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
rhwp-studio/src/engine/input-handler-keyboard.ts Alt/Option+Arrow/Backspace/Delete 단축키를 키다운 스위치에서 처리하도록 추가/가드 조정
rhwp-studio/src/engine/cursor.ts 본문/표 셀에서 단어 경계 탐색 후 커서 이동을 수행하는 moveToWordBoundary 및 유틸 함수 추가

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

if (this.cursor.hasSelection()) {
this.deleteSelection();
} else if (e.altKey) {
// Alt/Option+Backspace: 단어 삭제 (macOS standard)
Comment thread rhwp-studio/src/engine/cursor.ts Outdated
Comment on lines +541 to +548
const ppi = pos.parentParaIndex!;
const ci = pos.controlIndex!;
const cei = pos.cellIndex!;
const cpi = pos.cellParaIndex!;

try {
const text = this.wasm.getTextInCell(sec, ppi, ci, cei, cpi, 0, 9999);
const paraLen = text.length;
1. Alt+Backspace/Delete 주석: 'Backspace' → 'Backspace/Delete'
2. moveToWordBoundaryInCell: getTextInCell(0, 9999) 전체 fetch 대신
   getCellParagraphLength로 길이 확인 후 필요 구간만 슬라이스
@oksure

oksure commented May 11, 2026

Copy link
Copy Markdown
Contributor Author

Copilot 리뷰 반영 (262bf5c):

  1. Alt+Backspace/Delete 주석 수정
  2. moveToWordBoundaryInCell: getTextInCell(0, 9999) 전체 fetch → getCellParagraphLength로 길이 조회 후 필요 구간만 슬라이스

edwardkim added a commit that referenced this pull request May 11, 2026
작업지시자 시각 검증 영역 발견: 'Alt+Delete 만 동작하지 않습니다.'

본질: shortcut-map.ts:97 영역 영역 Alt+Delete → table:delete-col 매핑 (5/10 이전 등록) 영역 영역 일반 편집 영역 영역 dispatcher.dispatch 영역 영역 silently fail (canExecute=inTable 차단) + return → switch (e.key) case 'Delete' 영역 영역 도달 부재 → 단어 삭제 미동작.

정정: Alt 조합 단축키 가드 영역 영역 Alt+Delete 영역 영역 표 안/외 분기 추가:
- 표 안 + Alt+Delete: table:delete-col (칸 지우기, 기존 동작 보존)
- 표 외 + Alt+Delete: 다음 단어 삭제 (PR #794 본질)
- Alt+Backspace: 이전 단어 삭제 (항상)
- Alt+Arrow: 단어 이동 (항상)

PR #740 자기 정정 패턴 정합.
edwardkim added a commit that referenced this pull request May 11, 2026
PR #746 (Ctrl/Cmd+Arrow 줄/문서 시작·끝) 후속 영역 영역 Issue #223 의 다음 단계.

4 단축키:
- Option+←/→: 단어 단위 커서 이동
- Option+Shift+←/→: 단어 단위 선택 확장
- Option+Backspace: 이전 단어 삭제
- Option+Delete: 다음 단어 삭제

신규 인프라 — CursorState.moveToWordBoundary:
- 본문 (getTextRange) + 표 셀 (getTextInCell) 양 경로 지원
- 문자 클래스 5종 (공백/한글/Latin/Digit/Punct)
- 슬라이스 50 char cap (성능 가드)

본 환경 자기 정정 commit (7c0418f) — Alt+Delete 영역 영역 충돌 정정:
- shortcut-map.ts:97 영역 영역 Alt+Delete → table:delete-col 매핑 (이전 등록) 영역 영역 일반 편집 영역 영역 dispatcher silently fail + return → 단어 삭제 미동작.
- 정정: 표 안/외 분기 (옵션 1 작업지시자 결정):
  - 표 안 + Alt+Delete: table:delete-col (칸 지우기, 기존 동작 보존)
  - 표 외 + Alt+Delete: 다음 단어 삭제 (PR #794 본질)
  - Alt+Backspace / Alt+Arrow: 항상 단어 삭제/이동

검증:
- tsc --noEmit ✅
- cargo test --release ALL GREEN
- 광범위 sweep 170/170 same
- WASM 4.68 MB 재빌드
- 작업지시자 시각 검증 ✅ 통과 (자기 정정 후)

Part of #223
@edwardkim

Copy link
Copy Markdown
Owner

@oksure 검토 완료했습니다. 감사합니다.

처리 결과

Merge commit: 76e242c3 (devel)

본질

macOS 표준 단어 이동 4 단축키 구현 — Issue #223 의 PR #746 (Ctrl/Cmd+Arrow) 후속 단계.

신규 인프라 CursorState.moveToWordBoundary 영역 영역 본문 + 표 셀 양 경로 + 문자 클래스 5종 (공백/한글/Latin/Digit/Punct) + 슬라이스 50 char cap (성능 가드).

본 환경 자기 정정 (commit 7c0418fc)

작업지시자 시각 검증 영역 영역 발견 — "Alt+Delete 만 동작하지 않습니다." + "칸 지우기와 단어 지우기가 겹치는 군요!"

본질: shortcut-map.ts:97 영역 영역 Alt+Delete → table:delete-col 매핑 (이전 등록) 영역 영역 일반 편집 영역 영역 dispatcher silently fail + return → switch case 'Delete' 영역 영역 도달 부재.

정정 (작업지시자 결정 옵션 1): Alt+Delete 영역 영역 표 안/외 분기:

검증

  • TypeScript / cargo test ALL GREEN
  • 광범위 sweep 170/170 same
  • WASM 4.68 MB 재빌드
  • 작업지시자 시각 검증 ✅ 통과 (자기 정정 후)

Issue #223 OPEN 유지 — 한컴 주요 단축키 등 후속 단계 잔존.

5/11 사이클 4번째 PR — 수고하셨습니다.

@edwardkim

Copy link
Copy Markdown
Owner

Merged. Merge commit: 76e242c

@edwardkim edwardkim closed this May 11, 2026
edwardkim added a commit that referenced this pull request May 11, 2026
PR #794 (Part of #223) — Alt/Option+Arrow 단어 단위 커서 이동 + 자기 정정 commit (Alt+Delete 표 안/외 분기).
작업지시자 결정 옵션 1 — 표 안 = 칸 지우기 (기존) / 표 외 = 단어 삭제 (PR #794).

Merge commit: 76e242c
Cherry-pick: 6b2fcd7 + a32895b
자기 정정: 7c0418f
edwardkim added a commit that referenced this pull request May 11, 2026
@oksure — Issue #220 (한컴 F5/F3 블록 선택) 영역 4단계 정합. 5단계 영역 영역 문장 단계 영역
별 Issue 분리 후속.

본질 (2 PR commits + 1 정정 commit):
- cursor.ts (+85): _blockSelectionMode + _expandPhase 상태 + enterBlockSelectionMode /
  exitBlockSelectionMode / expandSelection 메서드 + isWordChar / findWordAt 헬퍼
  (Hangul AC00-D7AF + Hangul Jamo 3131-318E + Digit + Latin)
- input-handler-keyboard.ts (+30/-2): F5 토글 (본문/셀 isInCell() 분기) + F3 확장
  + Escape 분기
- Copilot 리뷰 반영 (59a01de): enterBlockSelectionMode anchor 강제 설정
  (this.anchor = { ...this.position })

F3 4단계 확장 (Issue #220 5단계 영역 영역 문장 단계 누락):
- F3 1회: 단어 (findWordAt)
- F3 2회: 문단 전체
- F3 3회: 구역 전체
- F3 4회: 문서 전체 (phase 4 cap)

본 환경 충돌 수동 해결 (1 파일):
- cursor.ts 파일 끝 영역 영역 PR #794 (findWordBoundaryForward/Backward, Alt+Arrow
  단어 이동) + PR #811 (findWordAt, F3 단어 선택) 두 유틸 양측 보존

정정 commit (dc6aa7a):
- wasm-bridge.ts 영역 영역 getSectionCount 중복 정의 제거 (PR #808 의 라인 231 보존,
  PR #811 영역 영역 추가본 제거)

자기 검증: tsc + cargo test ALL GREEN, WASM 재빌드 불필요 (TypeScript 단일)
시각 판정: 작업지시자 인터랙션 검증 ✅ 통과 (F5 본문/셀 + F3 4단계 + 회귀 부재)
CI: ✅ Build & Test + CodeQL + Canvas visual diff

별 Issue 후속 — F3 문장 단계 (Issue #220 5단계 영역 영역 문장 단계)
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.

3 participants