GN⁺: Emacs 윈도우 관리 백과사전
(karthinks.com)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의 윈도우 관리는 매우 유
Hacker News 의견
아래는 해커뉴스 댓글들을 요약한 내용임:
- 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% 크기로 분할해서 보여주는 방법에 대해 질문함.