1P by neo 2달전 | favorite | 댓글 1개

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-mapC-x w에 기본적으로 바인딩되어 있으며 몇 가지 유용한 윈도우 관리 명령을 모아둠
  • split-root-window-rightsplit-root-window-below는 프레임의 루트 윈도우를 분할함
  • tab-detachtear-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-ringglobal-mark-ring은 이동한 위치를 추적하여 필요한 경우 윈도우 전체에서 이동할 수 있게 해줌
  • point-to-registerjump-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+방향키로 윈도우 이동이 가능하게 하는 팁이 제공됨.
  • zygospore 패키지를 통해 C-x 1로 윈도우를 닫은 후, 다시 C-x 1을 누르면 이전 윈도우 레이아웃으로 복구할 수 있음을 소개함.
  • Acme 에디터에 대한 언급을 칭찬하는 댓글도 있음.
  • hledger-balance-sheet 함수 실행 시 journal 파일은 왼쪽에 열어두고, 오른쪽에 결과를 30% 크기로 분할해서 보여주는 방법에 대해 질문함.