여러 셀 선택과 병합

여러 셀 선택은 복수의 값을 한 번에 다루는 런타임 상태다. 선택 자체는 문서에 저장되지 않는다. 병합을 확정하면 값과 기본 행·열 구조는 Markdown에 남고, rowspan·colspan에 해당하는 표현은 projection profile의 overlay로 저장된다.

병합 실습 파일을 사용한다.

| 분기 | 채널 | 목표 | 실제 | 비고 |
| :--- | :--- | ---: | ---: | :--- |
| 상반기 | 문서 | 40 | 38 | |
| 상반기 | 영상 | 12 | 11 | |
| 하반기 | 문서 | 60 | 0 | 검토 필요 |
| 하반기 | 영상 | 20 | 0 | 검토 필요 |

1. 직사각형 범위를 선택한다

  • 첫 셀에서 마지막 셀까지 마우스로 드래그한다.
  • 첫 셀을 선택하고 Shift+방향키로 범위를 넓힌다.

선택 결과가 하나의 직사각형인지 확인한다. 병합과 선택 범위 Chart는 직사각형 좌표가 있어야 원본 표를 명확히 참조할 수 있다.

다중 선택 상태에서 BackspaceDelete를 누르면 선택된 셀 content만 비워야 한다. raw Markdown 전체가 예기치 않게 삭제되면 즉시 undo하고 선택 범위를 다시 확인한다.

Shift와 방향키로 만든 2행 2열 직사각형 표 선택

다음 영상은 첫 셀을 클릭하고 Shift+, Shift+를 차례로 눌러 2×2 범위를 만드는 과정이다. 선택 범위는 오른쪽 info zone에도 R1:R2 C1:C2로 표시된다.

2. 비연속 셀을 선택한다

Windows에서는 Ctrl+click, macOS에서는 Cmd+click으로 같은 table section의 셀을 하나씩 토글한다. 비연속 선택은 여러 값을 비교하거나 지울 때 유용하지만, 하나의 병합 영역으로 해석할 수 없다.

비연속 선택에서 셀 병합 action이 숨겨지는 것이 정상이다. 병합하려면 Esc로 선택을 해제하고 마우스 drag 또는 Shift+방향키로 직사각형 범위를 다시 만든다.

목표 40과 떨어진 실제 0을 Ctrl+click으로 고른 뒤 셀 병합이 빠진 컨텍스트 메뉴

위 화면의 info zone은 선택 범위를 비연속 본문 R1:R3 C3:C4로 표시한다. 우클릭 메뉴에는 행 추가·복제·제거와 셀 병합 해제가 남지만 셀 병합은 제공되지 않는다. 병합 해제는 실제 merge overlay가 없으면 변경하지 않는 noop이다.

3. 빈 셀 범위를 병합한다

  1. 실습 파일에서 상반기 두 행의 빈 비고 셀을 위에서 아래로 드래그한다.
  2. 셀 메뉴 또는 표 info zone에서 셀 병합을 선택한다.
  3. 병합된 표시가 한 anchor cell을 기준으로 만들어졌는지 확인한다.
  4. Source로 전환해 pipe table의 직사각형 구조가 유지되는지 확인한다.
  5. 저장 후 .glif/projections.json이 있는 예제 Scope라면 table presentation 설정이 함께 갱신되는지 확인한다.

Markdown 표 자체에는 rowspan이나 colspan 문법을 삽입하지 않는다. Glif 밖에서 열어도 원래 셀 값과 행·열 구조는 보존된다.

다음 9.8초 영상은 비연속 선택에서 병합 action이 숨겨지는 상태부터 빈 비고 셀 두 개의 drag 선택, 병합, 병합 해제까지 이어서 보여 준다.

상반기 두 행의 빈 비고 셀이 하나의 세로 병합 영역으로 표시된 결과

같은 병합 영역을 해제해 두 개의 빈 비고 셀로 복원한 결과

이 실증에서는 병합 직후 info zone의 선택 요약이 전체 표 · 본문 R1:R4 C1:C5로 돌아왔고, 해제 뒤 두 빈 셀과 4×5 pipe table 구조가 유지됐다.

4. 값이 있는 셀을 병합한다

덮이는 covered cell에 값이 있으면 Glif는 자동으로 버리지 않고 선택을 요구한다.

선택 Markdown에 일어나는 일 적합한 경우
내용 합쳐 병합 covered cell 내용을 anchor cell에 <br>로 합침 두 값 모두 남겨야 함
다른 셀 내용 삭제 anchor 외 값을 비움 중복 표기이며 anchor만 남겨도 됨
취소 원문과 profile 모두 변경하지 않음 무엇을 보존할지 다시 검토해야 함

실습에서는 첫 열의 상반기 두 셀을 위에서 아래로 드래그한다. 충돌 창은 covered cell 한 개의 상반기 값을 보여 주며, 같은 깨끗한 fixture에서 두 결과를 각각 실행해 비교한다.

상반기 두 셀을 병합할 때 표시되는 내용 합치기, 다른 셀 내용 삭제, 취소 선택지

내용 합쳐 병합은 anchor 값을 상반기<br>상반기로 바꾸고 covered cell을 비운 뒤 2행 span overlay를 저장한다.

상반기와 상반기를 줄바꿈으로 합쳐 세로 병합한 결과

다른 셀 내용 삭제는 anchor의 첫 상반기만 남기고 covered cell 값을 비운 뒤 같은 2행 span overlay를 저장한다.

첫 상반기만 남기고 covered cell의 중복 값을 지운 세로 병합 결과

취소는 원문과 projection profile을 모두 바꾸지 않는다. 어떤 값을 보존할지 확신할 수 없으면 먼저 취소하고 Source 또는 History에서 두 행을 비교한다.

5. 병합을 해제한다

병합 영역을 선택하고 셀 메뉴 또는 info zone에서 병합 해제를 실행한다. 해제는 overlay를 제거하지만, 병합할 때 이미 합치거나 삭제한 Markdown 값까지 자동으로 되살리지는 않는다.

병합을 취소하려는 목적이라면 병합 해제보다 병합 직후 Ctrl+Z가 정확하다. Glif는 covered cell의 Markdown 값 변경과 merge overlay를 하나의 history action으로 기록하므로, undo 한 번으로 값과 span을 함께 되돌린다.

  1. 병합 직후 결과를 확인한다. 아래 실증에서는 anchor가 상반기<br>상반기가 되고 첫 셀이 두 행을 차지한다.
  2. 다른 편집을 하기 전에 editor에 focus를 두고 Ctrl+Z를 누른다.
  3. anchor가 다시 상반기 하나가 되고, covered row의 첫 셀에도 상반기가 돌아왔는지 확인한다.
  4. 렌더형 표에서 첫 셀의 2행 span이 사라지고 두 개의 독립된 1행 셀이 보이는지 확인한다.
  5. 필요하면 Ctrl+Shift+Z로 병합을 다시 적용해 redo 경계도 확인한다.

내용 합쳐 병합 직후 상반기 값 두 개와 2행 span이 함께 적용된 화면

Ctrl Z 한 번으로 원래 두 상반기 셀과 각각 1행인 표를 복구한 화면

다음 4.2초 영상은 실제 내용 합쳐 병합 선택 뒤 Ctrl+Z를 입력한다. 실행 전·복구 후 Markdown 전체가 정확히 같고, 렌더된 첫 셀도 rowspan 2 → 1로 돌아왔다.

⚠️
병합 뒤 다른 source 편집을 여러 번 했다면 첫 undo가 가장 최근 편집부터 되돌린다. 원하는 병합 action까지 차례로 undo하거나, 문서 히스토리에서 revision을 확인한다. 단순 병합 해제는 overlay만 제거하므로 합치거나 삭제한 covered cell 값은 복원하지 않는다.

6. 병합된 표의 구조를 바꾼다

병합 영역과 교차하는 행·열 추가, 삭제, 복제, 이동은 source와 profile 좌표를 동시에 바꾼다. Glif가 안전한 remap을 증명할 수 있는 작업만 허용한다.

  • 삽입으로 병합 span을 안전하게 확장할 수 있으면 적용될 수 있다.
  • 병합을 둘로 찢거나 covered value를 잃는 삭제·복제·reorder는 차단될 수 있다.
  • Markdown rewrite나 profile write 중 하나라도 실패하면 action을 적용하지 않거나 원문을 rollback한다.

차단 메시지가 나오면 먼저 병합을 해제하고 구조를 바꾼 뒤 새 좌표에서 다시 병합하는 순서가 가장 명확하다.

7. 열 너비와 줄무늬를 함께 확인한다

열 너비와 zebra 표시도 table presentation profile에 저장된다. 기존 mdtable comment가 있는 문서를 처음 수정하면 profile로 migration될 수 있다. 병합 후 열 너비가 예상과 다르면 표·차트 설정 경계에서 해당 열을 auto로 돌린 뒤 고정 폭을 다시 설정한다.

  1. legacy migration 예제를 복사해 연다.
  2. 가운데 정렬, 두 번째 열 160px, 줄무늬가 기존 comment에서 읽혔는지 확인한다.
  3. 두 번째 열 셀을 선택하고 info zone의 고정 열 너비240px로 바꾼다.
  4. 줄무늬가 유지되고 두 번째 열만 넓어졌는지 확인한다.
  5. Source로 돌아가 표 값과 정렬 separator는 남고 mdtable comment가 제거됐는지 확인한다.
  6. .glif projection profile에 문서 참조, 240, "zebra": true가 함께 저장됐는지 확인한다.

legacy comment에서 160px와 줄무늬를 읽은 표

info zone에서 고정 열 너비를 바꾸는 화면

projection profile에 240px와 줄무늬를 함께 저장한 표

migration 뒤 legacy comment 없이 표 값과 정렬을 보존한 원문

열 너비와 줄무늬는 Markdown portability를 해치지 않도록 profile에 함께 저장된다. 원문 표를 다른 앱에서 열면 값과 정렬은 유지되지만 Glif 전용 고정 폭과 줄무늬는 적용되지 않을 수 있다.

실패와 복구

증상 의미 복구
병합 action이 없음 한 셀만 선택했거나 비직사각형 선택 두 셀 이상을 직사각형으로 다시 선택
값 충돌 dialog가 열림 covered cell에 값 존재 합치기·삭제·취소 중 의도에 맞는 선택
행·열 이동이 차단됨 span remap이 안전하지 않음 병합 해제 → 구조 변경 → 재병합
Ctrl+Z가 다른 편집부터 되돌림 병합 뒤 다른 source action을 실행함 병합 action까지 순서대로 undo하거나 History에서 revision 확인
병합 해제 뒤 값이 안 돌아옴 병합 해제는 overlay만 제거하며 병합 때 바뀐 원문 값은 복원하지 않음 History revision에서 값 복구
다른 앱에서 병합이 안 보임 병합은 Glif projection overlay Markdown 원문은 정상이며, 병합 없는 표로 공유하거나 Glif output 사용

완료 체크

  • 직사각형 선택과 비연속 선택을 각각 만들었다.
  • 비연속 선택에서 병합 action이 제공되지 않는 이유를 확인했다.
  • 값 충돌의 합치기·삭제·취소와 원문 영향을 비교했다.
  • 빈 셀 병합과 병합 해제를 실행했다.
  • 현재 빌드의 undo 검증 대기 경계와 History 복구 절차를 이해했다.