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 지원 활성
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 단축키를 보호하고 실행 없이 관찰할 준비를 한다.
- 미리 계산된 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 소스의 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 객체가 출력될 위치를 연다.
- 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를 눌러 코드 편집 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를 같은 셀에서 수집한다.
- 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의 네 값을 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 실행
목적 출력 표시 상태만 한 번 바꾼다.
- Command Palette에서 Notebook: Collapse Cell Output을 실행한다.
입력 위치 Command Palette
notebook.cell.collapseCellOutput정상 결과 stdout 본문이 숨고 접힌 출력 표시가 남는다.
확인 코드 두 줄은 그대로이며 출력 본문만 접혔는지 확인한다.
실패 신호 코드 입력이 접히거나 다른 셀이 바뀌었다.
복구와 재합류 Notebook: Expand Cell Output으로 즉시 복구하고 STEP-04로 돌아간다.
8. 접은 후 Context snapshot
목적 같은 셀에서 collapsed만 바뀌고 hasOutputs는 유지되는지 확인한다.
- 셀 선택을 유지한 채 Developer: Inspect Context Keys를 다시 실행해 같은 컨테이너를 클릭한다.
입력 위치 Command Palette → same Notebook cell
Snapshot B정상 결과 Console에 두 번째 Context 객체가 추가된다.
확인 두 객체의 네 key를 표로 비교한다.
실패 신호 다른 셀이나 코드 편집기를 클릭했다.
복구와 재합류 클릭 대상을 기록하고 Expand로 복구한 뒤 STEP-04부터 다시 시작한다.
9. Snapshot B 판정
목적 두 명령의 활성 조건 교대와 출력 존재 유지 여부를 확인한다.
- 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으로 복구
목적 실습 전 표시 상태로 되돌린다.
- Command Palette에서 Notebook: Expand Cell Output을 실행한다.
입력 위치 Command Palette
notebook.cell.expandCellOutput정상 결과 SAVED_OUTPUT_ONLY 문자열이 다시 보인다.
확인 초기 화면과 출력 문자열·셀 높이를 비교한다.
실패 신호 출력이 계속 접혀 있거나 출력 문자열이 달라졌다.
복구와 재합류 추가 명령을 중단하고 원문을 보존한 뒤 Expand 명령을 한 번만 다시 확인한다.
11. 파일과 키 바인딩 변경 0건 확인
목적 상태 관찰 외 변경이 없음을 독립 확인한다.
- 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, Expandfalse→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
6. 핵심 정리와 공식 자료
- Collapse와 Expand는 출력이 있는 같은 셀에서
notebookCellOutputIsCollapsed값에 따라 교대한다. - 출력을 접어도
notebookCellHasOutputs는 true로 유지된다. - Expand로 복구하고 파일·키 바인딩 변경 0건을 확인한다.
공식 자료
아래 자료는 2026-09-24 19:00 KST 기준입니다. 공식 사실과 UI 검증은 Stable 1.139.0 commit 2242ebbb54efeeb0129e08e919e7e8d43033cd83 기준이며 기본 설치본 1.138.0과 구분했습니다.
- When clause contexts · Microsoft
- Jupyter Notebooks in VS Code · Microsoft
- Notebook cell commands · Microsoft vscode Stable 1.139.0
- Notebook Context Keys · Microsoft vscode Stable 1.139.0
- Visual Studio Code 1.139.0 Release Notes · Microsoft
notebookCellHasOutputs=false 때문에 Collapse Cell Output 조건이 비활성인 이유를 읽기 전용으로 확인합니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 58부: Notebook 입력 모드에서 출력 접기 단축키가 멈추는 이유 (0) | 2026.09.27 |
|---|---|
| 커맨드 팔레트 57부: 출력이 없는 Notebook 셀의 출력 접기 조건 확인하기 (0) | 2026.09.25 |
| 커맨드 팔레트 55부: Notebook 셀 접기 전후 Context Keys 비교하기 (0) | 2026.09.24 |
| 커맨드 팔레트 54부: 같은 Chord의 When 조건을 Context Keys로 확인하기 (0) | 2026.09.22 |
| 커맨드 팔레트 53부: 같은 Chord 규칙을 우선순위 순서로 읽기 (0) | 2026.09.22 |