Skip to content

feat: 표 셀 높이/너비 균등화 커맨드 구현#758

Closed
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/table-cell-equalize
Closed

feat: 표 셀 높이/너비 균등화 커맨드 구현#758
oksure wants to merge 2 commits into
edwardkim:develfrom
oksure:contrib/table-cell-equalize

Conversation

@oksure

@oksure oksure commented May 9, 2026

Copy link
Copy Markdown
Contributor

변경 내용

table:cell-height-equal (단축키 H)과 table:cell-width-equal (단축키 W) 스텁 커맨드를 실제 동작하도록 구현했습니다.

table:cell-height-equal (셀 높이를 같게)

  • 표 내 모든 행의 높이를 평균값으로 균등화
  • getCellProperties로 각 셀의 HWPUNIT 높이를 조회
  • resizeTableCells로 delta 값을 전달하여 리사이즈
  • rowSpan > 1인 병합 셀은 건너뜀

table:cell-width-equal (셀 너비를 같게)

  • 표 내 모든 열의 너비를 평균값으로 균등화
  • 동일한 방식으로 getCellProperties + resizeTableCells 사용
  • colSpan > 1인 병합 셀은 건너뜀

구현 방식

  1. getTableDimensions로 셀 개수 조회
  2. 전체 셀을 순회하며 getCellInfo로 행/열 위치, getCellProperties로 현재 크기 조회
  3. 행(또는 열)별 평균 크기 계산
  4. 전체 평균 산출 후 각 셀의 delta를 resizeTableCells API로 일괄 적용

테스트

  • cargo test 전체 통과
  • cargo clippy -- -D warnings 경고 없음

감사합니다.

table:cell-height-equal (H) — 모든 행의 높이를 평균으로 균등화
table:cell-width-equal (W) — 모든 열의 너비를 평균으로 균등화

getCellProperties로 HWPUNIT 단위 크기 조회 후
resizeTableCells로 delta 적용. rowSpan/colSpan > 1 셀은
건너뛰어 병합 셀과 충돌 방지.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 9, 2026 15:48

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

표 편집 기능에서 기존 스텁으로 남아 있던 셀 높이/너비 균등화 커맨드(table:cell-height-equal, table:cell-width-equal)를 WASM API를 이용해 실제로 동작하도록 구현한 PR입니다.

Changes:

  • table:cell-height-equal 커맨드 구현: 표의 셀 높이를 평균값 기준으로 균등화(병합 셀 rowSpan > 1 제외)
  • table:cell-width-equal 커맨드 구현: 표의 셀 너비를 평균값 기준으로 균등화(병합 셀 colSpan > 1 제외)
  • getTableDimensions/getCellInfo/getCellProperties로 현 상태를 수집하고 resizeTableCells 배치 API로 일괄 적용 후 document-changed 이벤트 발생

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

Comment on lines +379 to +383
for (let i = 0; i < dims.cellCount; i++) {
const info = services.wasm.getCellInfo(sec, ppi, ci, i);
if (info.rowSpan > 1) continue;
const props = services.wasm.getCellProperties(sec, ppi, ci, i);
const delta = avgHeight - props.height;
Comment on lines +421 to +425
for (let i = 0; i < dims.cellCount; i++) {
const info = services.wasm.getCellInfo(sec, ppi, ci, i);
if (info.colSpan > 1) continue;
const props = services.wasm.getCellProperties(sec, ppi, ci, i);
const delta = avgWidth - props.width;
첫 번째 패스에서 cellIdx/row(col)/height(width)를 캐시하여
두 번째 패스에서 WASM API 재호출 없이 delta를 계산.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@oksure

oksure commented May 9, 2026

Copy link
Copy Markdown
Contributor Author

Copilot 리뷰 피드백 반영 (e88bd05):

첫 번째 순회에서 { idx, row/col, height/width } 배열로 캐시하여 두 번째 패스에서 WASM API를 다시 호출하지 않도록 개선했습니다.

edwardkim added a commit that referenced this pull request May 10, 2026
2 stub 활성화 — getTableDimensions + getCellInfo + getCellProperties + resizeTableCells 인프라 재사용:
- table:cell-height-equal — 셀 높이 균등화 (행별 평균 → 전체 평균 → delta resize)
- table:cell-width-equal — 셀 너비 균등화 (열별 평균 → 전체 평균 → delta resize)
- 병합 셀 (rowSpan>1 / colSpan>1) 영역 영역 균등화 미포함

Copilot 리뷰 반영: 셀 정보 캐싱 영역 영역 이중 순회 제거.

검증:
- tsc --noEmit ✅
- cargo test --release ALL GREEN
- 광범위 sweep 170/170 same
- WASM 4.68 MB 재빌드
- 웹 에디터 인터랙션 검증 ✅ 통과 (커맨드 본질)

후속 분리:
- shortcutLabel 'H' / 'W' 영역 영역 shortcut-map 등록 부재 영역 영역 단축키 미동작 → 메뉴 hotkey 인프라 + H/W 단축키 활성 영역 별 task
@edwardkim

Copy link
Copy Markdown
Owner

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

처리 결과

Merge commit: b555739a (devel)

본질

표 메뉴 2 stub 활성화 — getTableDimensions + getCellInfo + getCellProperties + resizeTableCells 인프라 재사용 영역 영역 행/열 평균 → 전체 평균 → delta resize.

인프라 재사용

  • 모든 WASM API 기존
  • inTable 가드 (기존)
  • 병합 셀 (rowSpan>1 / colSpan>1) 영역 영역 균등화 미포함 정합

검증

  • TypeScript / cargo test ALL GREEN
  • 광범위 sweep 170/170 same
  • WASM 4.68 MB 재빌드
  • 웹 에디터 인터랙션 검증 통과 (커맨드 본질)

후속 분리 — Issue #792

shortcutLabel: 'H' / 'W' 영역 영역 한컴 메뉴 hotkey (메뉴 열린 후 H 영역 영역 항목 활성) 정합 의도 영역 영역 rhwp-studio 영역 영역 메뉴 hotkey 인프라 미구현. Issue #792 영역 영역 등록 — 메뉴 hotkey 인프라 + H/W 단축키 활성 영역 별 task.

본 PR 영역 영역 shortcutLabel 영역 영역 메뉴 라벨 표시 영역 영역 보존 — Issue #792 영역 영역 메뉴 hotkey 인프라 도입 후 활성 정합.

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

@edwardkim

Copy link
Copy Markdown
Owner

Merged. Merge commit: b555739. 후속 — Issue #792 영역 영역 메뉴 hotkey 인프라.

@edwardkim edwardkim closed this May 10, 2026
edwardkim added a commit that referenced this pull request May 10, 2026
PR #758 (Issue 미연결) 처리 보고서 + 검토 문서 archives 이동 + 5/10 orders 24번째 PR 행 추가.
표 셀 높이/너비 균등화 — 인프라 재사용 + 메뉴 hotkey 인프라 후속 분리.

Merge commit: b555739
Cherry-pick: dcdba52 + c9ebee5
후속 Issue: #792 (메뉴 hotkey 인프라)
edwardkim added a commit that referenced this pull request May 11, 2026
@oksure — Issue #792 (PR #758 5/10 머지 영역 H/W shortcutLabel 도입 후 단축키 미동작 발견):
한컴 메뉴 hotkey (메뉴 열린 상태 영역 단일 키 영역 항목 활성) 인프라 정합.

본질 (2 commits, menu-bar.ts +26/-2):
- setupKeyboardClose 영역 hotkey 매칭 추가 — 메뉴 열린 상태 영역 modifier 없는
  단일 키 영역 .md-shortcut 텍스트 매칭 → 해당 .md-item dispatch + 메뉴 닫기
- Copilot 리뷰 반영 (3cdf7a6): hotkey 경로 영역 data-* params 전달 —
  메뉴 클릭 경로 영역 동일 params 일관성

영역 좁힘 가드:
- modifier 키 동반 시 무시 (전역 shortcut-map 충돌 방지)
- 단일 문자 키만 (e.key.length === 1)
- disabled 항목 제외 (:not(.disabled))
- 대소문자 무시 (.toUpperCase())
- 메뉴 닫힌 상태 early return (일반 텍스트 입력 영향 부재)
- Escape 기존 동작 보존

자기 검증: tsc + cargo test ALL GREEN, WASM 재빌드 불필요 (TypeScript 단일)
시각 판정: 작업지시자 인터랙션 검증 ✅ 통과 (표 메뉴 H/W + 전역 단축키 회귀 부재)
CI: ✅ Build & Test + CodeQL (js-ts/python/rust) + Canvas visual diff
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