feat: Alt/Option+Arrow 단어 단위 커서 이동 (#223)#794
Conversation
macOS Option+Arrow (단어 이동), Option+Shift+Arrow (단어 선택), Option+Backspace/Delete (단어 삭제) 구현. - CursorState.moveToWordBoundary() 메서드 추가 - 한글/영문/숫자/공백/구두점 문자 클래스 기반 경계 탐지 - 본문 및 표 셀 내부 모두 지원 - Alt+Arrow가 기존 Alt 단축키 핸들러에 잡히지 않도록 가드 추가
There was a problem hiding this comment.
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) |
| 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로 길이 확인 후 필요 구간만 슬라이스
|
Copilot 리뷰 반영 (262bf5c):
|
작업지시자 시각 검증 영역 발견: '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 자기 정정 패턴 정합.
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
|
@oksure 검토 완료했습니다. 감사합니다. 처리 결과Merge commit: 본질macOS 표준 단어 이동 4 단축키 구현 — Issue #223 의 PR #746 (Ctrl/Cmd+Arrow) 후속 단계. 신규 인프라 본 환경 자기 정정 (commit
|
|
Merged. Merge commit: 76e242c |
@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단계 영역 영역 문장 단계)
요약
macOS 표준 단어 이동 단축키 구현:
구현
CursorState.moveToWordBoundary(direction)— 단어 경계 탐색 후 커서 이동getTextRange/getTextInCell활용)문자 클래스 경계 규칙
테스트
cargo test+cargo clippy통과감사합니다.