2 minute read

Not all windows are created equally. Some are less important. Some I want gone once they have served their purpose, like code output or a help buffer. Others I want to stick around, like a scratch buffer or org-capture popup.

More than that, popups ought to be the second class citizens of my editor; spawned off to the side, discarded with the push of a button (e.g. ESC or C-g), and easily restored if I want to see them again. Of course, this system should clean up after itself and kill off buffers I mark as transient.

모든 창이 똑같이 생성되는 것은 아닙니다. 일부는 덜 중요합니다. 코드 출력이나 도움말 버퍼처럼 용도가 끝나면 사라졌으면 하는 창도 있습니다. 스크래치 버퍼나 org-capture 팝업처럼 계속 유지하고 싶은 팝업도 있습니다.

그보다 팝업은 에디터에서 2등 시민이 되어야 하며, 버튼(예: ESC 또는 C-g)을 누르면 사라지고, 다시 보고 싶을 때 쉽게 복원할 수 있어야 합니다. 물론 이 시스템은 스스로 정리하고 사용자가 일시적인 것으로 표시한 버퍼를 없애야 합니다.

:ui popup - Doom Emacs v21.12 documentation - docs.doomemacs.org

어디서 본 적이 있는 것 같은데, doom emacs에서는 직접 구현한 모듈(module)이 있다.

설정 방법

  • +all
    • Enable fallback rules to ensure all temporary/special buffers (whose name begins with a space or asterix) are treated as popups.
  • +defaults
    • Enable reasonable default popup rules for a variety of buffers.

빈칸이나 * 문자로 시작하는 건 모두 임시 버퍼 취급하는 +all 옵션과 적당히 타협하는 +default 옵션이 있다.

(doom! :ui
       (popup +defaults)   ; tame sudden yet inevitable temporary windows
       )

init.el 파일에 설정한다. 적당한 옵션으로 세팅해서 사용하고 있다.

사용 방법

주로 사용하는 키는 다음과 같다. 팝업창을 일반 창으로 승격시키는 기능도 있다. 자신이 쓰기 위해 만든 모듈은 이렇게 기능이 디테일하다.

  • C-g - 닫기
  • C-x p - +popup/other - 열린 팝업창으로 이동
  • SPC ~ - +popup/toggle - 팝업창을 여닫는다
  • C-~ - +popup/raise - 팝업창을 일반 창으로 승격

현재 사용 예

popup 모듈 확장성이 좋다. 패키지에 팝업으로 띄웠으면 좋겠다고 하는 window에 적용해서 쓰고 있다.

ElDoc 패키지에서 사용하는 window에 팝업을 적용했다.

(after! eldoc
  ;; =M-x eldoc-doc-buffer= 함수 호출로 표시하는 buffer 크기 조절
  (set-popup-rule! "^\\*eldoc for" :size 0.2 :vslot -1))

Web Archive 링크를 만드는 패키지에도 결과를 보여줄 때, 팝업으로 보여준다.

(when (functionp #'set-popup-rule!)
  (set-popup-rule! my/web-archive-result-buffer-name :size 0.25 :ttl nil :vslot -1))

size, ttl, vslot 등 옵션도 많다.

마치며

맞다. 모든 윈도우가 같은 취급을 받으면 안 된다. 어떤 윈도우는 계속 한자리를 차지하고 있어야 하지만 어떤 윈도우는 잠시 보였다가 손쉽게 사라져야 한다. 만약 Doom Emacs를 떠나 다른 곳으로 간다면 그리울 패키지다. 비슷한 기능을 가진 걸 찾거나 Doom Emacs를 벗어나더라도 사용할 수 있게 분리하는 작업을 시작할 것 같다.

C-x C-s C-x C-c

링크