개발/Visual Studio Code

커맨드 팔레트 56부: Notebook 셀 출력 접기 전후 Context Keys 비교하기

반응형
VS CODE 초보자 시리즈 · 커맨드 팔레트 56부

Notebook 셀 출력 접기 전후 Context Keys 비교하기

미리 계산된 출력이 있는 같은 셀에서 출력 존재는 유지되고 접힘 상태만 바뀌는지 두 Snapshot으로 확인합니다.

notebookCellHasOutputs=true는 유지되고 notebookCellOutputIsCollapsed만 false → true로 바뀝니다.

셀 실행 없이 출력 접기·펼치기 조건을 판정하고 파일·키 바인딩 변경 0건을 확인합니다.

1. 시작하기 전에

초보자가 Notebook 셀의 출력 존재와 출력 접힘을 구분해 같은 Chord의 When 조건을 이해하는 읽기 전용 관찰 실습입니다.

준비할 것

  • VS Code Stable 1.139.0 portable 격리 Profile — 최신 Stable UI 확인
  • 미리 계산된 stdout 출력 1건이 저장된 샘플 Notebook — kernel·셀 실행 불필요
  • Developer Tools Console — Context 객체 확인
  • Notebook과 User keybindings.json 원본 — 변경 0건 비교

적용 환경 2026-09-24 · Windows 11 · VS Code Stable 1.139.0 · PowerShell · 영어 기본 UI·사용자 확장 0개·내장 Notebook 지원 활성

안전하게 시작하기 셀 실행·저장·단축키 편집을 하지 않습니다. Collapse 후 Expand로 출력 표시를 복구합니다. 중단 조건: 같은 셀과 포커스를 유지할 수 없거나 파일이 바뀌면 중단합니다.

2. 알아둘 핵심 개념

FACT · notebookCellOutputIsCollapsed

선택된 Notebook 셀 출력이 접혔는지를 나타내는 Boolean Context key입니다.

FACT · notebookCellHasOutputs

선택된 셀에 출력이 하나 이상 있는지를 나타냅니다. 출력을 접어도 삭제되는 것은 아니므로 이번 관찰에서는 true를 유지합니다.

FACT · 두 When 식

Collapse는 notebookCellListFocused && !notebookCellOutputIsCollapsed && !inputFocus && notebookCellHasOutputs, Expand는 notebookCellListFocused && notebookCellOutputIsCollapsed입니다.

FACT · 상태 변경

Stable 1.139.0 소스는 Collapse에서 isOutputCollapsed = true, Expand에서 false로 설정합니다.

PROCEDURE · 두 Snapshot

같은 셀 컨테이너를 클릭해 접기 전 A와 접은 후 B를 만들고 네 key를 표로 비교합니다.

EXAMPLE · 격리 관찰

A는 true / false / true / false, B는 true / false / true / true였고 두 When 결과가 교대했습니다.

RECOMMENDATION · 한 변수만 바꾸기

셀·포커스·클릭 위치는 고정하고 출력 접힘 상태만 바꿉니다.

UNCONFIRMED · 환경 차이

확장, UI 언어, 선택 DOM과 내부 Context key는 독자 환경에서 다를 수 있으므로 실제 Snapshot을 기준으로 합니다.

3. 순서대로 진행하기

각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.

1. 출력이 포함된 격리 Notebook 확인

목적 업무 Notebook과 User 단축키를 보호하고 실행 없이 관찰할 준비를 한다.

주의·되돌리기 즉시 닫고 저장하지 않은 뒤 격리 샘플에서 STEP-01로 재합류한다.
  1. 미리 계산된 stdout 출력 1건이 저장된 샘플 Notebook을 열고 셀 실행·저장·키 바인딩 편집을 하지 않기로 확인한다.

입력 위치 격리 폴더의 output-collapse-context.ipynb

execution_count=1 / stream output 1건 / User keybindings.json 원본
정상 결과 코드 두 줄 아래에 SAVED_OUTPUT_ONLY가 보인다.

확인 Notebook JSON의 output 1건과 화면 출력 문자열을 대조한다.

실패 신호 업무 Notebook이 열렸거나 Run 아이콘을 눌렀다.

복구와 재합류 즉시 닫고 저장하지 않은 뒤 격리 샘플에서 STEP-01로 재합류한다.

2. 비교할 두 When 식 적기

목적 상태 변화 전에 판정식을 고정한다.

주의·되돌리기 현재 Stable commit의 원문을 다시 열고 STEP-02로 돌아온다.
  1. Stable 소스의 Collapse·Expand Cell Output When 식을 실습 메모에 그대로 적는다.

입력 위치 공식 Stable cellCommands.ts

Collapse: listFocused && !outputCollapsed && !inputFocus && hasOutputs / Expand: listFocused && outputCollapsed
정상 결과 Collapse 식에 hasOutputs 보호 조건이 있고 Expand 식은 collapsed=true를 요구한다.

확인 명령 ID·Context key 네 개·연산자를 원문과 대조한다.

실패 신호 hasOutputs 조건이나 출처 버전이 빠졌다.

복구와 재합류 현재 Stable commit의 원문을 다시 열고 STEP-02로 돌아온다.

3. Developer Tools Console 준비

목적 Context 객체가 출력될 위치를 연다.

주의·되돌리기 Help > Toggle Developer Tools로 다시 열고 STEP-03에 재합류한다.
  1. Command Palette에서 Developer: Toggle Developer Tools를 실행하고 Console을 선택한다.

입력 위치 Command Palette → Developer Tools Console

Console
정상 결과 Console 입출력 영역이 보인다.

확인 Developer Tools 상단의 Console 탭을 확인한다.

실패 신호 Console이 없거나 별도 창을 찾을 수 없다.

복구와 재합류 Help > Toggle Developer Tools로 다시 열고 STEP-03에 재합류한다.

4. 같은 셀을 command mode로 선택

목적 listFocused=true와 inputFocus=false인 측정 위치를 만든다.

주의·되돌리기 Esc를 누르고 필요하면 Expand Cell Output을 실행한 뒤 STEP-04를 반복한다.
  1. 셀 왼쪽 여백을 클릭하고 Esc를 눌러 코드 편집 caret을 없앤다.

입력 위치 Notebook cell container

selected cell / no input caret / output visible
정상 결과 셀 선택 표시는 남고 코드 편집 caret은 없으며 출력은 펼쳐져 있다.

확인 선택 테두리·caret 부재·출력 문자열을 함께 확인한다.

실패 신호 코드 편집 caret이 깜박이거나 출력이 이미 접혀 있다.

복구와 재합류 Esc를 누르고 필요하면 Expand Cell Output을 실행한 뒤 STEP-04를 반복한다.

5. 접기 전 Context snapshot

목적 초기 collapsed와 hasOutputs를 같은 셀에서 수집한다.

주의·되돌리기 선택 요소를 기록하고 STEP-04부터 다시 측정한다.
  1. Developer: Inspect Context Keys를 실행하고 선택된 셀 컨테이너를 한 번 클릭한다.

입력 위치 Command Palette → selected Notebook cell

Snapshot A
정상 결과 Console에 Context 객체 하나가 추가된다.

확인 객체에서 notebookCellListFocused, inputFocus, notebookCellHasOutputs, notebookCellOutputIsCollapsed를 찾는다.

실패 신호 객체가 없거나 네 key 중 하나가 없다.

복구와 재합류 선택 요소를 기록하고 STEP-04부터 다시 측정한다.

6. Snapshot A 판정

목적 출력이 펼쳐진 상태에서 Collapse가 활성인 이유를 설명한다.

주의·되돌리기 Snapshot A 한 객체만 다시 읽고, 출력이 없다면 STEP-01로 돌아간다.
  1. Snapshot A의 네 값을 Collapse와 Expand 식에 각각 대입한다.

입력 위치 실습 메모

listFocused=true / inputFocus=false / hasOutputs=true / outputCollapsed=false
정상 결과 Collapse=true, Expand=false로 계산된다.

확인 네 원시 값과 최종 Boolean을 나란히 대조한다.

실패 신호 값을 다른 Context 객체에서 섞었거나 hasOutputs가 false다.

복구와 재합류 Snapshot A 한 객체만 다시 읽고, 출력이 없다면 STEP-01로 돌아간다.

7. Notebook: Collapse Cell Output 실행

목적 출력 표시 상태만 한 번 바꾼다.

주의·되돌리기 Notebook: Expand Cell Output으로 즉시 복구하고 STEP-04로 돌아간다.
  1. Command Palette에서 Notebook: Collapse Cell Output을 실행한다.

입력 위치 Command Palette

notebook.cell.collapseCellOutput
정상 결과 stdout 본문이 숨고 접힌 출력 표시가 남는다.

확인 코드 두 줄은 그대로이며 출력 본문만 접혔는지 확인한다.

실패 신호 코드 입력이 접히거나 다른 셀이 바뀌었다.

복구와 재합류 Notebook: Expand Cell Output으로 즉시 복구하고 STEP-04로 돌아간다.

8. 접은 후 Context snapshot

목적 같은 셀에서 collapsed만 바뀌고 hasOutputs는 유지되는지 확인한다.

주의·되돌리기 클릭 대상을 기록하고 Expand로 복구한 뒤 STEP-04부터 다시 시작한다.
  1. 셀 선택을 유지한 채 Developer: Inspect Context Keys를 다시 실행해 같은 컨테이너를 클릭한다.

입력 위치 Command Palette → same Notebook cell

Snapshot B
정상 결과 Console에 두 번째 Context 객체가 추가된다.

확인 두 객체의 네 key를 표로 비교한다.

실패 신호 다른 셀이나 코드 편집기를 클릭했다.

복구와 재합류 클릭 대상을 기록하고 Expand로 복구한 뒤 STEP-04부터 다시 시작한다.

9. Snapshot B 판정

목적 두 명령의 활성 조건 교대와 출력 존재 유지 여부를 확인한다.

주의·되돌리기 환경 차이를 UNKNOWN으로 기록하고 Expand 후 STEP-04부터 재측정한다.
  1. Snapshot B 값을 같은 두 When 식에 대입하고 Snapshot A와 비교한다.

입력 위치 실습 메모

listFocused=true / inputFocus=false / hasOutputs=true / outputCollapsed=true
정상 결과 Collapse=false, Expand=true이며 hasOutputs는 true로 유지된다.

확인 outputCollapsed만 false→true이고 나머지 세 값은 같은지 확인한다.

실패 신호 hasOutputs 또는 포커스 값도 달라졌다.

복구와 재합류 환경 차이를 UNKNOWN으로 기록하고 Expand 후 STEP-04부터 재측정한다.

10. Notebook: Expand Cell Output으로 복구

목적 실습 전 표시 상태로 되돌린다.

주의·되돌리기 추가 명령을 중단하고 원문을 보존한 뒤 Expand 명령을 한 번만 다시 확인한다.
  1. Command Palette에서 Notebook: Expand Cell Output을 실행한다.

입력 위치 Command Palette

notebook.cell.expandCellOutput
정상 결과 SAVED_OUTPUT_ONLY 문자열이 다시 보인다.

확인 초기 화면과 출력 문자열·셀 높이를 비교한다.

실패 신호 출력이 계속 접혀 있거나 출력 문자열이 달라졌다.

복구와 재합류 추가 명령을 중단하고 원문을 보존한 뒤 Expand 명령을 한 번만 다시 확인한다.

11. 파일과 키 바인딩 변경 0건 확인

목적 상태 관찰 외 변경이 없음을 독립 확인한다.

주의·되돌리기 오류 원문과 현재 파일을 보존하고 백업으로 복원한 뒤 STEP-11을 다시 확인한다.
  1. Notebook 파일과 격리 User keybindings.json을 실습 전 원본과 바이트 비교한다.

입력 위치 PowerShell / 격리 파일

Notebook unchanged / keybindings [] / output visible
정상 결과 두 파일이 원본과 같고 미리 계산된 출력이 펼쳐져 있다.

확인 해시 또는 전체 문자열 비교 결과와 최종 화면을 확인한다.

실패 신호 어느 파일이든 달라졌거나 출력이 숨겨져 있다.

복구와 재합류 오류 원문과 현재 파일을 보존하고 백업으로 복원한 뒤 STEP-11을 다시 확인한다.

4. 완료 확인하기

두 Context 객체와 파일 비교로 교차 확인합니다.

  • Snapshot A — listFocused=true, inputFocus=false, hasOutputs=true, outputCollapsed=false.
  • Snapshot B — 앞 세 값은 같고 outputCollapsed=true.
  • When 판정 — Collapse true→false, Expand false→true.
  • 복구 — Expand 뒤 SAVED_OUTPUT_ONLY 문자열이 다시 보인다.
  • 독립 확인 — Notebook과 격리 keybindings.json이 원본과 같다.
완료 기준 출력 존재 true 유지, 접힘 false→true, 두 식의 교대, 펼침 복구, 파일 변경 0건이 모두 확인됐습니다.

5. 문제가 생겼다면

Context 객체가 없음

먼저 확인 Console 탭과 클릭 대상을 확인합니다.

복구 오류 원문을 보존하고 Console을 다시 엽니다.

재합류 STEP-03

inputFocus가 true

먼저 확인 코드 편집 caret이 남아 있는지 봅니다.

복구 Esc로 command mode에 들어갑니다.

재합류 STEP-04

notebookCellHasOutputs가 false

먼저 확인 출력이 없는 셀이나 다른 셀을 측정했는지 확인합니다.

복구 셀을 실행하지 말고 미리 계산된 출력 샘플을 다시 엽니다.

재합류 STEP-01

접기 후 collapsed가 false

먼저 확인 같은 셀 컨테이너를 클릭했는지 기록합니다. 원인은 UNKNOWN일 수 있습니다.

복구 Expand로 복구하고 처음부터 다시 측정합니다.

재합류 STEP-04

Expand가 보이지 않음

먼저 확인 접힘 상태와 셀 선택을 확인합니다.

복구 Snapshot B를 보존하고 임의 단축키 편집 없이 Command Palette를 다시 엽니다.

재합류 STEP-10

파일이 달라짐

먼저 확인 현재 파일과 오류 원문을 보존합니다.

복구 추가 저장·Reset을 중단하고 백업으로 복원합니다.

재합류 STEP-11

핵심 판단 같은 셀·포커스가 아니면 두 Snapshot 비교는 무효입니다. 원인을 UNKNOWN으로 남기고 다시 측정합니다.

6. 핵심 정리와 공식 자료

  • Collapse와 Expand는 출력이 있는 같은 셀에서 notebookCellOutputIsCollapsed 값에 따라 교대한다.
  • 출력을 접어도 notebookCellHasOutputs는 true로 유지된다.
  • Expand로 복구하고 파일·키 바인딩 변경 0건을 확인한다.

공식 자료

아래 자료는 2026-09-24 19:00 KST 기준입니다. 공식 사실과 UI 검증은 Stable 1.139.0 commit 2242ebbb54efeeb0129e08e919e7e8d43033cd83 기준이며 기본 설치본 1.138.0과 구분했습니다.

다음 편 예고 출력이 없는 셀에서 notebookCellHasOutputs=false 때문에 Collapse Cell Output 조건이 비활성인 이유를 읽기 전용으로 확인합니다.
반응형
이 글이 유용했다면 링크를 공유해 보세요.