같은 Chord의 When 조건을 Context Keys로 확인하기
Editor와 Notebook의 현재 Context 값을 같은 Ctrl+K Ctrl+C 규칙에 대입해 어느 When 식이 참인지 확인합니다.
이번 편의 핵심
클릭한 UI 요소의 Context 객체를 Developer Tools Console에서 읽습니다.
Editor·Notebook Snapshot을 섞지 않고 세 When 식을 계산하며 단축키 파일은 변경하지 않습니다.
1. 시작하기 전에
초보자가 같은 Chord의 실행 후보를 고치기 전에 현재 UI Context와 When 식을 읽기 전용으로 연결하는 실습입니다.
준비할 것
- VS Code Stable 1.138.0 —
Help: About에서 확인 - 쓰기 가능한 텍스트 파일 — caret 포커스 확인
- 코드 셀 하나가 있는 Notebook — 셀 목록 포커스와 현재 접힘 상태 확인
- User
keybindings.json백업 — 실습 전후 비교
적용 환경 2026-09-22 · Windows 11 · VS Code Stable 1.138.0 · PowerShell · 영어 기본 UI 격리 관찰본
2. 알아둘 핵심 개념
FACT · Context key
VS Code UI의 보임·활성·포커스 상태를 나타내는 이름과 현재 값입니다.
FACT · Inspect Context Keys
Stable 1.138.0에서 workbench.action.inspectContextKeys는 십자 커서로 클릭한 요소의 scoped Context를 수집해 Console에 객체로 출력합니다.
FACT · Editor 조건
editorTextFocus는 텍스트 Editor에 caret 포커스가 있을 때, editorReadonly는 Editor가 읽기 전용일 때 참입니다.
FACT · 논리 연산
!는 부정, &&는 모든 피연산자가 참일 때만 참입니다.
PROCEDURE · 한 Snapshot
같은 객체에서 나온 값만 하나의 When 식에 대입하고 규칙은 편집하지 않습니다.
RECOMMENDATION · 격리 샘플 우선
처음에는 민감한 경로와 확장 Context가 없는 격리 샘플에서 절차를 익힌 뒤 업무 Workspace로 옮깁니다.
EXAMPLE · 격리 관찰
Editor에서는 editorTextFocus: true, editorReadonly: false여서 Add Line Comment 식이 참이었습니다. Notebook에서는 notebookCellListFocused: true, inputFocus: false, notebookCellInputIsCollapsed: true여서 Expand 식만 참이었습니다.
UNCONFIRMED · 환경 차이
Notebook 키, 확장 제공 키, UI 언어와 값은 버전·확장·선택 요소에 따라 달라질 수 있습니다. 실제 출력이 기준입니다.
3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 같은 Chord의 세 When 식 기록하기
목적 비교할 대상을 먼저 고정한다.
- Keyboard Shortcuts에서 정확 필터 `"Control+K Control+C"`를 열고 세 System 행의 When 식을 복사한다.
입력 위치 Keyboard Shortcuts 검색 상자와 When 열
editorTextFocus && !editorReadonly / notebookCellListFocused && !inputFocus && !notebookCellInputIsCollapsed / notebookCellInputIsCollapsed && notebookCellListFocused정상 결과 세 식이 명령별로 구분되어 있다.
확인 Command·When·Source를 한 줄씩 대조한다.
실패 신호 행 수 또는 식이 다르다.
복구와 재합류 현재 버전·확장·User 규칙을 기록하고 독자 환경의 실제 행을 기준으로 계속한다.
2. User 단축키 원본 백업하기
목적 실습이 읽기 전용이었음을 독립 확인할 기준을 만든다.
- Preferences: Open Keyboard Shortcuts (JSON)을 열어 전체 내용을 안전한 임시 메모에 복사한다.
입력 위치 User keybindings.json
실습 전 전체 JSON정상 결과 비교 가능한 원본이 있다.
확인 파일의 처음과 끝, 배열 괄호를 확인한다.
실패 신호 백업이 없거나 JSON 오류가 있다.
복구와 재합류 진행을 중단하고 JSON 오류를 먼저 해결한 뒤 STEP-02로 돌아온다.
3. Developer Tools Console 열기
목적 Context 값이 출력될 위치를 준비한다.
- Command Palette에서 `Developer: Toggle Developer Tools`를 실행하고 Console 탭을 선택한다.
입력 위치 Command Palette와 Developer Tools
Console정상 결과 Console 입력·출력 영역이 보인다.
확인 Developer Tools 상단에서 Console이 선택되었는지 확인한다.
실패 신호 Console 탭이 없거나 별도 창을 찾을 수 없다.
복구와 재합류 Help > Toggle Developer Tools로 다시 열고 Console을 선택한 뒤 STEP-03에 재합류한다.
4. 기존 Console 출력 보존 후 정리하기
목적 새 Context 객체를 이전 로그와 혼동하지 않는다.
- 필요한 기존 오류 원문을 먼저 복사한 뒤 Console의 Clear 버튼을 누른다.
입력 위치 Developer Tools Console
보존한 오류 메모 + 빈 Console정상 결과 기존 로그가 비워지고 필요한 원문은 별도 보존됐다.
확인 빈 Console과 보존 메모가 모두 있는지 확인한다.
실패 신호 필요한 오류 원문을 복사하지 않은 채 지웠다.
복구와 재합류 추가 삭제를 중단한다. 재현 가능한 경우에만 오류를 다시 재현하고 STEP-04로 돌아온다.
5. 일반 텍스트 Editor에 커서 두기
목적 Editor용 When 피연산자를 같은 위치에서 측정한다.
- 쓰기 가능한 텍스트 파일을 열고 본문 한 줄을 클릭해 caret이 깜박이게 한다.
입력 위치 Text Editor 본문
caret visible정상 결과 텍스트 Editor가 포커스를 가진다.
확인 caret과 활성 Editor 탭을 함께 확인한다.
실패 신호 읽기 전용 미리보기이거나 caret이 없다.
복구와 재합류 쓰기 가능한 샘플 텍스트 파일로 전환하고 STEP-05를 다시 확인한다.
6. Editor 요소의 Context Keys 출력하기
목적 클릭한 DOM 범위의 현재 Context를 수집한다.
- Command Palette에서 `Developer: Inspect Context Keys`를 실행한 뒤 십자 커서로 Editor 글자 영역을 한 번 클릭한다.
입력 위치 Command Palette → Text Editor
workbench.action.inspectContextKeys정상 결과 Console에 하나의 Context 객체가 출력되고 십자 커서가 끝난다.
확인 Console의 마지막 출력이 객체인지 확인한다.
실패 신호 객체가 없거나 다른 UI 요소가 빨갛게 선택됐다.
복구와 재합류 Console을 정리하고 STEP-05에서 포커스를 복구한 뒤 STEP-06을 반복한다.
7. Editor 피연산자 두 개 읽기
목적 Add Line Comment의 When을 값으로 판정한다.
- 출력 객체에서 `editorTextFocus`와 `editorReadonly`를 찾아 값을 기록한다.
입력 위치 Developer Tools Console 객체
editorTextFocus: true / editorReadonly: false (격리 관찰값)정상 결과 `true && !false`가 true로 계산된다.
확인 두 키가 같은 객체에 있는지 확인한다.
실패 신호 키가 없거나 예상값과 다르다.
복구와 재합류 선택한 요소와 파일의 읽기 전용 여부를 기록한다. 원인은 UNKNOWN으로 두고 STEP-05부터 다시 측정한다.
8. Editor 규칙 활성 여부 표시하기
목적 관찰값과 When 식을 분리해 결론을 남긴다.
- `editorTextFocus && !editorReadonly`의 각 피연산자와 최종 결과를 한 줄 진리표로 작성한다.
입력 위치 실습 메모
true && !false → true정상 결과 Add Line Comment 행만 Editor 관찰값에서 참임을 설명할 수 있다.
확인 원시 값과 최종 Boolean을 나란히 대조한다.
실패 신호 값 없이 명령 이름만 활성이라고 적었다.
복구와 재합류 STEP-07의 원시 값을 다시 붙이고 식을 왼쪽부터 계산한다.
9. Notebook 셀 목록에 포커스 두기
목적 Notebook용 When 피연산자를 입력 상자 밖에서 측정한다.
- 코드 셀이 있는 Notebook을 열고 셀 왼쪽 여백 또는 셀 컨테이너를 클릭한다. 코드 입력 caret은 두지 않고 입력 접힘 상태는 바꾸지 않는다.
입력 위치 Notebook cell list
current collapse state + list focus + no text input focus정상 결과 셀 목록이 포커스를 갖고 입력 상자는 포커스를 갖지 않으며 현재 접힘 상태가 유지된다.
확인 선택 테두리, caret 부재와 현재 접힘 상태를 확인한다.
실패 신호 코드 입력 caret이 보이거나 관찰 전에 접힘 상태가 바뀌었다.
복구와 재합류 Esc로 편집 모드를 빠져나오고 셀 컨테이너를 다시 선택한 뒤 STEP-09를 확인한다.
10. Notebook 요소의 Context Keys 출력하기
목적 두 Notebook 명령이 공유하는 현재 Context를 수집한다.
- `Developer: Inspect Context Keys`를 다시 실행하고 선택된 셀의 컨테이너를 한 번 클릭한다.
입력 위치 Command Palette → Notebook cell container
workbench.action.inspectContextKeys정상 결과 Console에 두 번째 Context 객체가 출력된다.
확인 출력 순서와 클릭 대상을 메모한다.
실패 신호 Editor 객체만 남거나 입력 편집기의 Context가 출력됐다.
복구와 재합류 Console을 지우지 말고 대상을 다시 확인한 뒤 STEP-09부터 두 번째 객체를 다시 수집한다.
11. Notebook 피연산자 세 개 읽기
목적 Collapse와 Expand의 When을 같은 Snapshot으로 판정한다.
- 두 번째 객체에서 `notebookCellListFocused`, `inputFocus`, `notebookCellInputIsCollapsed` 값을 기록한다.
입력 위치 Developer Tools Console 객체
listFocused / inputFocus / inputIsCollapsed정상 결과 세 값이 한 Snapshot으로 기록됐다.
확인 세 키의 객체 출력 시각이 같은지 확인한다.
실패 신호 한 값을 다른 시점의 객체에서 가져왔다.
복구와 재합류 객체의 출력 시각을 맞추고 STEP-10에서 다시 한 번에 수집한다.
12. 세 규칙 비교와 변경 0건 확인하기
목적 관찰 가능한 완료 조건을 닫는다.
- Editor·Notebook 진리표를 비교하고 User keybindings.json을 실습 전 백업과 대조한다.
입력 위치 실습 메모 + User keybindings.json
one active When per observed target / keybindings unchanged정상 결과 활성 식, 거짓 식, Context 값, 변경 0건이 모두 있다.
확인 세 판정과 파일 비교 결과를 체크리스트로 확인한다.
실패 신호 둘 이상의 식을 동시에 참으로 표시했거나 JSON이 달라졌다.
복구와 재합류 활성 판정을 UNKNOWN으로 되돌리고, JSON이 바뀌었다면 오류 원문을 보존한 뒤 백업 전체를 복원하고 STEP-12를 다시 확인한다.
4. 완료 확인하기
UI 관찰과 독립된 파일 비교를 함께 사용합니다.
- 원문 — 세 행의 Command·When·Source를 기록했다.
- Editor Snapshot —
editorTextFocus와editorReadonly가 같은 객체에서 나왔다. - Notebook Snapshot — 세 Notebook 피연산자가 같은 객체에서 나왔다.
- 판정 — 각 값과
!·&&계산을 보여 활성 식과 거짓 식을 구분했다. - 독립 확인 — User
keybindings.json이 실습 전 백업과 같다.
완료 기준 두 대상의 Context Snapshot, 세 When 식의 판정, 변경 0건이 모두 확인됐습니다.
5. 문제가 생겼다면
Console에 객체가 없음
먼저 확인 Developer Tools의 Console 탭과 선택 대상을 확인합니다.
복구 오류 원문을 보존하고 Console을 다시 엽니다.
재합류 STEP-03
Editor 값이 예상과 다름
먼저 확인 미리보기·읽기 전용·입력 위젯 여부를 기록합니다. 원인은 UNKNOWN일 수 있습니다.
복구 쓰기 가능한 텍스트 본문을 다시 선택합니다.
재합류 STEP-05
Notebook 키가 없음
먼저 확인 코드 입력 caret이 아닌 셀 컨테이너를 클릭했는지 확인합니다.
복구 Esc로 편집 모드를 빠져나온 뒤 셀 컨테이너를 선택합니다.
재합류 STEP-09
두 Notebook 식이 모두 거짓
먼저 확인 inputFocus와 셀 접힘 상태를 그대로 보존합니다.
복구 값을 임의 수정하지 말고 같은 Snapshot에서 다시 계산합니다.
재합류 STEP-11
keybindings.json이 달라짐
먼저 확인 오류 원문과 현재 JSON을 보존합니다.
복구 추가 Reset을 중단하고 백업 전체를 복원합니다.
재합류 STEP-12
6. 핵심 정리와 공식 자료
- 같은 키라도 When이 현재 Context에서 참인 규칙만 후보다.
- Inspect Context Keys는 클릭한 UI 요소의 scoped Context를 Console에 보여 준다.
- 값은 한 Snapshot 단위로 계산하고 keybindings.json은 편집하지 않는다.
공식 자료
아래 자료는 2026-09-22 19:00 KST 기준으로 확인했습니다. 일부 Context key는 내부용이며 확장·버전·선택 요소에 따라 달라질 수 있습니다.
- When clause contexts · Microsoft
- Keyboard shortcuts for Visual Studio Code · Microsoft
- Developer actions · Microsoft vscode Stable 1.138.0
- Context Key Service · Microsoft vscode Stable 1.138.0
- Visual Studio Code 1.138.0 Release Notes · Microsoft
notebookCellInputIsCollapsed Snapshot을 두 번 비교해 Collapse·Expand 규칙이 교대하는 경계를 확인합니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 56부: Notebook 셀 출력 접기 전후 Context Keys 비교하기 (0) | 2026.09.25 |
|---|---|
| 커맨드 팔레트 55부: Notebook 셀 접기 전후 Context Keys 비교하기 (0) | 2026.09.24 |
| 커맨드 팔레트 53부: 같은 Chord 규칙을 우선순위 순서로 읽기 (0) | 2026.09.22 |
| 커맨드 팔레트 52부: 같은 Chord의 Source와 When 비교하기 (0) | 2026.09.20 |
| 커맨드 팔레트 51부: 두 단계 Chord의 입력 경계와 충돌 수 확인 (0) | 2026.09.20 |