# Emacs 윈도우 관리 백과사전

> Clean Markdown view of GeekNews topic #14778. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14778](https://news.hada.io/topic?id=14778)
- GeekNews Markdown: [https://news.hada.io/topic/14778.md](https://news.hada.io/topic/14778.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-13T10:06:34+09:00
- Updated: 2024-05-13T10:06:34+09:00
- Original source: [karthinks.com](https://karthinks.com/software/emacs-window-management-almanac/)
- Points: 1
- Comments: 1

## Topic Body

### Emacs 윈도우 관리에 대한 개요

#### 윈도우 관리의 평판과 잠재력
- Emacs의 윈도우 관리는 평판이 좋지 않음
- 이는 매우 유연하고 세분화된 레이아웃 시스템과 거친 제어를 결합한 결과로 인한 것이 대부분임
- 이는 윈도우를 처리하기 위해 더 나은 메타포와 affordance를 제공하는 도구를 만들고 사용할 수 있는 여지를 남겨둠

#### 기본적인 윈도우 관리 옵션들

##### `other-window`와 "next window"
- `other-window` (`C-x o`)는 기본적인 윈도우 전환 경험을 제공함
- 이는 Emacs 튜토리얼에서 가르치는 것이며, 윈도우 수가 적을 때 잘 작동함
- 윈도우 선택은 프레임 전체를 (대략) 시계 방향으로 순환함

##### `windmove`
- `windmove`는 방향에 따라 윈도우 간에 포커스를 이동하고 윈도우 간에 버퍼를 이동하기 위한 내장 Emacs 라이브러리임
- Vim 사용자들에게 기대되는 기능이며, `evil-mode` 사용자들은 이미 Windmove를 사용하고 있음
- `windmove-left`, `-right`, `-up`, `-down`을 방향과 연관된 키에 바인딩하여 사용함

##### `frames-only-mode`
- `frames-only-mode`는 Emacs 윈도우 처리를 OS에 맡길 수 있게 해줌
- 모든 버퍼를 새 프레임에서 열면 윈도우 관리자의 작업이 됨
- 이는 Emacs 버퍼를 OS 윈도우와 동일하게 만들어 동일한 키로 관리할 수 있게 해줌

##### `winum-mode`
- Winum은 O(n) (`other-window`)에서 O(√n) (`windmove`)으로, 그리고 O(1)로 n개의 윈도우 간 전환하는 노력의 자연스러운 발전임 
- 모드 라인에 윈도우 번호를 추가하여 번호로 윈도우를 선택할 수 있음
- 미니버퍼가 활성화되면 항상 번호 0이 할당됨

##### `ace-window`
- ace-window는 키보드 기반 Emacs 윈도우 제어의 끝판왕임
- 각 윈도우 상단에 "힌트"를 배치하고 해당 키를 입력하면 해당 윈도우로 포커스가 전환됨
- 일반적인 방법으로 윈도우를 "선택"하고 이 윈도우로 무엇을 할지를 사용자가 결정함
- 윈도우 삭제, 이동 또는 교체, 분할, 버퍼 표시 등 기본 제공 작업 외에도 사용자 정의 작업을 추가할 수 있음

##### 마우스 사용
- 윈도우 관리에 마우스를 사용하는 것의 장점은 즉각적이고 명백함
- 윈도우 선택은 기본적인 마우스 사용의 자연스러운 확장이며, 윈도우 크기 조정은 간단함
- 컨텍스트 메뉴와 드래그 앤 드롭 지원은 매우 직관적임
- 단점을 완화하기 위해서는 마우스를 이미 다른 작업에 사용하고 있을 때 Emacs를 마우스로 구동하는 것이 실제로 저항이 가장 적은 경로임

##### `transpose-frame` (회전, 뒤집기 및 뒤집기)
- transpose-frame은 프레임에서 윈도우 레이아웃을 회전하거나 미러링하는 명령을 제공함
- `rotate-frame`, `flip-frame`, `flop-frame`을 적절한 키에 바인딩하여 자주 사용함

##### `window-prefix-map`
- `window-prefix-map`은 `C-x w`에 기본적으로 바인딩되어 있으며 몇 가지 유용한 윈도우 관리 명령을 모아둠
- `split-root-window-right`와 `split-root-window-below`는 프레임의 루트 윈도우를 분할함
- `tab-detach`와 `tear-off-window`는 새 탭이나 새 프레임으로 윈도우를 이동하는 편리한 명령임

##### `other-window-prefix`
- `other-window-prefix`는 윈도우 선택을 버퍼 표시와 분리하는 방법을 제공하고 **세 가지** 윈도우 관련 불편함을 해결함
- 많은 Emacs 명령은 기본 작업, 버퍼 및 윈도우를 긴밀하게 결합함. `other-window-prefix`를 사용하면 명령의 버퍼를 다른 윈도우에 표시할 수 있음
- `other-window-prefix`를 사용하면 링크와 같은 객체를 활성화할 때 윈도우를 선택할 수 있음
- `other-window-prefix`를 사용하면 각 패키지 작성자의 작동 방식에 맞추거나 사용자 정의할 필요 없이 균일하게 "링크" 객체를 열 수 있음

##### 윈도우 구성 저장 및 복원
- `window-configuration-to-register`는 다소 둔한 도구이지만 큰 빨간색 재설정 버튼으로 완벽함
- 언제든지 이 명령을 사용하여 현재 윈도우 구성을 레지스터에 저장한 다음 `jump-to-register`로 복원할 수 있음
- `winner-mode`를 사용하면 Emacs가 과거 윈도우 배열의 스택을 유지 관리하도록 요청할 수 있음

#### 심층 탐구

##### 앞뒤로 이동하는 방법
- 동시에 몇 개의 윈도우가 있든 관계없이 대부분의 경우 두 개의 윈도우 사이를 전환하기만 하면 됨
- `other-window-mru` 명령을 사용하여 윈도우 쌍 간에 전환할 수 있음

##### `other-window` 개선
- 단일 윈도우가 있는 경우 프레임을 분할하도록 `other-window`를 만들 수 있음
- 공간적 순서 대신 마지막 사용 순서대로 윈도우를 순환하도록 할 수 있음 (`switchy-window` 패키지)
- 호출할 때마다 윈도우 전환 방향을 반대로 하여 두 윈도우 간에 자연스럽게 교대할 수 있음

##### `ace-window` 디스패치로 윈도우 마법 사용
- `ace-window`는 윈도우에 대해 `completing-read`가 문자열 목록에 대해 하는 것과 같은 역할을 함
- `aw-select`를 사용하여 _모든_ 작업을 _모든_ 윈도우에서 호출하기 위한 세 단계 중 처음 두 단계(필터링 및 선택)에 이상적임
- `ace-window-one-command`를 사용하면 ace-window로 윈도우를 선택한 다음 해당 윈도우에서 _모든_ 단순 명령을 실행할 수 있음
- `ace-window-prefix`를 사용하면 `other-window-prefix`와 유사하지만 다음 명령의 버퍼를 표시할 윈도우를 명시적으로 선택할 수 있음

##### 윈도우를 전환해야 하는가?
- Avy를 사용한 윈도우에 구애받지 않는 이동은 일반적인 아이디어의 특수한 경우임
- 텍스트 컨테이너로서 윈도우는 불필요한 추상화일 수 있음
- `mark-ring`과 `global-mark-ring`은 이동한 위치를 추적하여 필요한 경우 윈도우 전체에서 이동할 수 있게 해줌
- `point-to-register`와 `jump-to-register`를 사용하여 나중에 이동할 위치를 수동으로 고정할 수 있음
- 북마크를 만들고 이동하면 Emacs나 사용자가 확인한 의미 있는 위치로 윈도우 전체를 탐색할 수 있는 많은 옵션을 제공함

##### 윈도우와 상호 작용하지 않도록 윈도우 처리
- `display-buffer-alist`와 자동 윈도우 동작을 사용하여 두더지 잡기 윈도우 문제를 해결할 수 있음
- 매일 Emacs에서 보는 모든 종류의 버퍼에 대한 규칙을 설정하면 대부분의 윈도우 관리가 해결됨
- `display-buffer-alist`의 문제는 작동하지 않는 것이 아니라 _많은_ 작업이 필요하다는 것임
- Shackle 패키지는 `display-buffer-alist`의 이상함을 덮어쓰고 윈도우 규칙을 지정하기 위한 단순화된 elisp 인터페이스를 제공함
- Emacs 배포판은 일반적으로 이러한 설정을 지정하기 위한 간단한 인터페이스를 제공함

##### Popper, Popwin, shell-pop 및 vterm-toggle
- Popwin과 Popper는 모든 버퍼가 동등하게 생성되는 것은 아니라는 관찰을 기반으로 함
- 이러한 패키지를 사용하면 보조 윈도우를 사용하는 팝업 버퍼를 지정하고 필요에 따라 해당 윈도우를 호출 및 해제할 수 있음

#### 누락된 부분

##### window-tree
- Emacs가 윈도우를 나타내는 방식과 위에서 논의한 접근 방식을 사용하여 윈도우를 조작하는 방식 사이에는 근본적인 차이가 있음
- 프레임의 윈도우는 트리로 정렬되며 리프 노드는 "실제" 윈도우이고 나머지는 "내부" 윈도우임
- 윈도우-트리 작업을 위한 명령을 추가하면 많은 새로운 가능성이 열림

##### 타일링 창 관리자 통합기
- Emacs의 윈도우-트리 모델은 i3나 bspwm과 같은 수동 타일링 윈도우 관리자의 모델과 거의 동일함
- 타일링 윈도우 관리자 내에서 다른 타일링 윈도우 관리자를 사용하는 이유에 대해 자연스럽게 의문이 제기됨
- Emacs에서 모든 윈도우 관리자와의 통합을 위한 보다 깨끗하고 통합된 인터페이스를 제공하면 훨씬 쉬워질 수 있음

#### 전망
- 윈도우를 전환, 이동, 건너뛰기, 생성, 삭제 및 조작하는 방법, 명령을 호출할 때 즉석에서 윈도우 표시를 제어하는 여러 가지 방법, 윈도우에서 작업하고 윈도우에 대해 전혀 생각하지 않는 방법 등이 있음
- 윈도우 관리는 복잡하다기보다는 개방적임
- Emacs는 재료와 일부 지침을 제공하며 재료는 그 자체로 기본 식사로 사용될 수 있음
- 그러나 약간의 조리로 우리는 맛있는 것을 만들 수 있음

### GN⁺의 의견
- 윈도우 관리는 Emacs의 가장 큰 약점 중 하나이며, 사용자 친화적이지 않음. 특히 초보자에게는 혼란스러울 수 있음. 
- 제시된 방법들은 Emacs의 윈도우 관리 문제를 완화시킬 수 있지만, 근본적인 해결책은 되지 못함. 보다 직관적이고 사용하기 쉬운 윈도우 관리 시스템이 필요함.
- Emacs의 윈도우 관리는 매우 유

## Comments



### Comment 25179

- Author: neo
- Created: 2024-05-13T10:06:34+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40326362) 
아래는 해커뉴스 댓글들을 요약한 내용임:

- Custom Elisp 함수를 통해 두 윈도우를 70% 대 30%의 크기로 조정하는 방법을 소개함. Lisp 코드도 제공됨.
- `ace-window`, `ace-window-display-mode`, `frames-only-mode` 등의 패키지를 활용해볼 것을 제안함.
- Emacs를 싱글 윈도우 모드로 사용하고, 불가피하게 여러 윈도우가 생성되더라도 자동으로 닫히게 한다는 의견도 있음.
- `windmove-mode`를 활성화하고 `(windmove-default-keybindings 'control)`를 통해 Ctrl+방향키로 윈도우 이동이 가능하게 하는 팁이 제공됨. 
   - 관련 미니멀 Emacs 설정도 공유됨: https://codeberg.org/ashton314/emacs-bedrock
- `zygospore` 패키지를 통해 `C-x 1`로 윈도우를 닫은 후, 다시 `C-x 1`을 누르면 이전 윈도우 레이아웃으로 복구할 수 있음을 소개함.
- Acme 에디터에 대한 언급을 칭찬하는 댓글도 있음.
- `hledger-balance-sheet` 함수 실행 시 journal 파일은 왼쪽에 열어두고, 오른쪽에 결과를 30% 크기로 분할해서 보여주는 방법에 대해 질문함.
