관련메타

BIBLIOGRAPHY

“키티 터미널 Kitty the Fast, Feature-Rich, Gpu Based Terminal Emulator.” n.d. kitty. Accessed June 18, 2025. https://sw.kovidgoyal.net/kitty/.

“Slimmer Emacs with Kitty 터미널 이맥스 키티 통합.” 2022. 2022. https://jao.io/blog/slimmer-emacs-with-kitty.html.

whhone. n.d. “Using Emacs in a Terminal - Wai Hon’s Blog.” Accessed August 30, 2024. https://whhone.com/posts/emacs-in-a-terminal/.

히스토리

  • [2025-06-19 Thu 02:09] 정리하세
  • 2024-09-09 kkp term-keys 옵션이 많아졌다.
  • 2023-08-30 문서 정리
  • 2023-04-01 성공 WORKLOG 참고
  • 2022-09-17 시도 그러나 실패 포기 ~/sync/markdown/oldnote/periodic/daily/2022-09-17.md

How to run Emacs on terminal with kitty

2023 키티와 이맥스 키 전달이 핵심이다

[2023-08-30 Wed 09:11] 분명 3 월 말 경에 해결했다고 한다. 이 문제는 2022-09-17 이 근방에서도 엄청 고민했던 문제였다. 근데 이걸 어떻게 한 것인가?

다시 하려고 하니 잊고 있었다. 그래서 정리한다. 여기에서는 키티 터미널에서 이맥스를 사용하며 몇 몇 키를 바인딩 한다. 그래야 편히 사용할 수 있다.

정한에게는 매우 중요한 문제라 이게 해결이 안되면 터미널에서 이맥스를 사용 하지 못했을 것이다.

Hangul, AltL+Shift : 한영 전환

PageUp, PageDown : 익숙한 키다

Delete : 이게 바인딩이 안 되있으면 불편하다.

F1-12 : 필요

ALT/CTRL+TAB : 필요하다.

M-<return> : vertico-map — vertico-exit-input

아무튼 처음에는 AltL+Shift 키만 적용했다가 몇 가지 키를 추가했다.

이 작업에는 term-keys 라는 패키지를 사용한다. 즉 키티를 수정 할 게 없다. 여기를 수정했다. 다음 파일의 아래 일부를 수정 또는 추가하면 된다.

;;; term-keys.el --- Lossless keyboard input in a terminal emulator
 
;;     ["<Hangul>"  "Hangul"		122	"Hangul"		nil	nil		nil		"Hangul"	"Hangul"		nil	nil	nil	"Hangul"	nil	]
;; S-PgUp/PgDn - usually used for scrolling the terminal, which is not useful in Emacs
;; (and (member key '("Prior" "Next")) shift)
 
(and (member key '(
                   "Return" "Tab" "BackSpace"))
     meta)
 
;; Shift + special chars
(and (member key '("Tab" "space" "Return" "BackSpace")) shift) ;; add space for Alt+Space
 
;; Menu (Apps) key
(string-equal key "Menu")
 
;; Hangul / PgDown / PgUp / Delete
(string-equal key "Hangul")
(string-equal key "Prior")
(string-equal key "Next")
(string-equal key "Delete")
(string-equal key "F1")
(string-equal key "F2")
(string-equal key "F3")
(string-equal key "F4")
(string-equal key "F5")
(string-equal key "F6")
(string-equal key "F7")
(string-equal key "F8")
(string-equal key "F9")
(string-equal key "F10")
(string-equal key "F11")
(string-equal key "F12")

위와 같이 코드가 들어가 있으면 아래와 같이 키티 바인딩 키를 확인할 수 있다.

(require 'term-keys-kitty)
(with-temp-buffer
  (insert (term-keys/kitty-conf))
  (write-region (point-min) (point-max) "~/kitty-for-term-keys.conf"))

conf 파일은 대략 아래와 같다.

...
map DELETE                                                  send_text all \x1b\x1f\x56\x60\x1f
map SHIFT+DELETE                                            send_text all \x1b\x1f\x56\x61\x1f
map CTRL+DELETE                                             send_text all \x1b\x1f\x56\x62\x1f
...

이제 키티가 꼭 이맥스에 전달해줘야 하는 키 바인딩을 kitty.conf 파일에 등록해준다.

# change 'input method' for emacs with 'term-keys'
map SHIFT+SPACE   send_text all \x1b\x1f\x50\x21\x1f
map Hangul        send_text all \x1b\x1f\x50\x60\x1f
map DELETE        send_text all \x1b\x1f\x56\x60\x1f
map PAGE_UP       send_text all \x1b\x1f\x58\x60\x1f
map PAGE_DOWN     send_text all \x1b\x1f\x59\x40\x1f
# map F1            send_text all \x1b\x1f\x60\x1f
map F2            send_text all \x1b\x1f\x21\x40\x1f
map F3            send_text all \x1b\x1f\x22\x20\x1f
map F4            send_text all \x1b\x1f\x22\x60\x1f
map F5            send_text all \x1b\x1f\x23\x40\x1f
map F6            send_text all \x1b\x1f\x24\x20\x1f
map F7            send_text all \x1b\x1f\x24\x60\x1f
map F8            send_text all \x1b\x1f\x25\x40\x1f
map F9            send_text all \x1b\x1f\x26\x20\x1f
map F10           send_text all \x1b\x1f\x26\x60\x1f
map F11           send_text all \x1b\x1f\x27\x40\x1f
map F12           send_text all \x1b\x1f\x28\x20\x1f
map SHIFT+TAB      send_text all \x1b\x1f\x34\x21\x1f
map CTRL+TAB       send_text all \x1b\x1f\x34\x22\x1f
map SHIFT+CTRL+TAB  send_text all \x1b\x1f\x34\x23\x1f
 
map ALT+TAB                                                 send_text all \x1b\x1f\x34\x24\x1f
map SHIFT+ALT+TAB   send_text all \x1b\x1f\x34\x25\x1f
map CTRL+ALT+TAB                                            send_text all \x1b\x1f\x34\x26\x1f

그리고 나서는 터미널 모드에서만 본 패키지를 활성화 한다.

  (use-package term-keys
    :unless window-system
    :ensure
    :config
    (term-keys-mode t))

이렇게 하면 키티에서 Emacs 실행 시에 위 키가 정확히 전달이 된다.

이맥스는 자체 입력기 시스템을 사용하기 때문에 여기에 맞게 넣어줘야 한다. 터미널에서 지원이 제대로 안되는 것 뿐이다.

이 문제는 이렇게 간단하게 정리하지만 정말 해결하고 싶었다. 물론 X11 터미널을 사용하면 한글 입력 되긴 된다. 근데 이건 아니다. Emacs 입력기를 사용하는게 아니기 때문이다. 자동 완성에서 한글은 대 한 민 국 이런 식으로 어설프게 처리된다.

왜 키티 터미널인가?

[2023-08-30 Wed 10:08] 아래 글을 보고 나서 딱 생각이 들었다. slimmer emacs with kitty 참고로 이 글은 1 년 전에 보았다. 못해서 아쉬웠을 뿐이다. 이제 충분하지 않는가?

요약하자면 먼저 메모리 관리와 성능 측면이다. Emacs 가 거의 모든 일을 다 처리하기 때문에 잘 관리해야 한다.

더 중요한 측면은 키티 터미널이다. 터미널 임에도 그래픽 모드와 크게 다르지 않은 높은 퀄리티로 이맥스를 사용할 수 있다.

이러기 위해서는 Emacs 설정을 튜닝해야 했다. 다행히도 이 글을 쓰는 2023-08-30 시점에는 기본 이상으로 다 갖춰진 상태다. 폰트와 이모지까지 다 커버 한다. 조직 모드에서 최적의 화면 구성도 맞춰 놓았다. org-modern 없이 아주 깔금하다.

실행은 쉘 설정 파일에 다음과 같이 추가함.

alias emacskitty='TERM=kitty-direct emacs --with-profile default -nw'
alias emacskittyclient='TERM=kitty-direct emacsclient -s /home/junghan/.cache/spacemacs-server-29 -nw'

남은 문제 corfu-terminal alignment on Org Src Block

[2023-08-30 Wed 10:36] 깔끔하게 안된다. 기다려보자. 괜찮다. 조직모드의 소스 블락에서 발생한다. 인덴테이션과 충돌이 나는 것 같다.

터미널 전용 Emacs 패키지 정리

[2023-08-30 Wed 10:13] 위에 있는 term-keys 뿐만 아니라 다음 패키지도 필요하다.

term-keys

2023-03-13 드디어 동작한다. kitty 를 활용 할 수 있다. (잘 안쓰겠지만)

  (use-package term-keys
    :unless window-system
    :ensure
    :config
    (term-keys-mode t)
    )

[2023-03-13 Mon 11:12]

corfu-terminal

  (use-package corfu-terminal
    :unless window-system
    :after corfu
    :config
    (add-hook 'corfu-mode-hook 'corfu-terminal-mode)
    )

[2023-04-14 Fri 14:57]

xclip

  (use-package xclip
    :unless window-system
    :config
    (unless (display-graphic-p)
      (xclip-mode 1)))

버티컬 보더 vertical-border

[2025-01-26 Sun 19:03]

(“Slimmer Emacs with Kitty 터미널 이맥스 키티 통합” 2022)

slimmer emacs with kitty

 
;;;; vertical-border
 
;; (set-display-table-slot standard-display-table 'vertical-border (make-glyph-code ?│))
(setq mode-line-end-spaces nil)
 
;; (unless (display-graphic-p) ; terminal
;;   (set-display-table-slot standard-display-table
;;                           'vertical-border
;;                           (make-glyph-code ?│)))
 

2023 Emacs and SpaceVim on Markdown on Kitty

[2023-08-31 Thu 05:22]

지금 나의 설정에서 비교할 겸. 스크린샷. 둘다 Kitty 사용. 빔과 비슷. 어색하지 않다. 그 뒤의 풍부함이라. 테마는 다양하니 골라쓰라.

width=“100%” >

관련링크

”Using Emacs in a Terminal - Wai Hon’s Blog”

(whhone n.d.)

키티 터미널 kitty The fast, feature-rich, GPU based terminal emulator

(“키티 터미널 Kitty the Fast, Feature-Rich, Gpu Based Terminal Emulator” n.d.)

The fast, feature-rich, GPU based terminal emulator Fast Uses GPU and SIMD vector CPU instructions for best in class, Uses threaded rendering for absolutely minimal latency, Performance tradeoffs c…

아카이브

DONE modus-themes on terminal emacs

[2023-03-14 Tue 12:12] 오랜 숙원이던 Emacs 터미널 모드가 정상적으로 동작하면서 틈틈이 신경을 쓰고자 한다. 일단 터미널 모드에서도 구이 모드와 유사한 수준의 화면 구성이 되야 한다. 그 다음에 모드 별로 나눠서 조절하면 될 것이다. 어디까지 가능할지 궁금하다.

Modus Themes | Protesilaos Stavrou

 
> toe -a | grep kitty
xterm-kitty	KovIdTTY
kitty-direct	KovId's TTY using direct colors
kitty+common	KovId's TTY common properties
kitty       KovId's TTY
xterm-kitty	KovIdTTY
 
> toe -a | grep direct
alacritty-direct        alacritty with direct color indexing
vscode-direct   Visual Studio Code with direct-colors
tmux-direct     tmux with direct-color indexing
kitty-direct    KovId's TTY using direct colors
 
> kitty --debug-font-fallback
[073 12:27:44.058138] Preloaded font faces:
[073 12:27:44.058176] normal face: /home/junghan/.local/share/fonts/sarasa-ttc.ttc:221
[073 12:27:44.058190] bold face: /home/junghan/.local/share/fonts/sarasa-ttc.ttc:413
[073 12:27:44.058204] italic face: /home/junghan/.local/share/fonts/sarasa-ttc.ttc:269
[073 12:27:44.058235] bi face: /home/junghan/.local/share/fonts/sarasa-ttc.ttc:461
[073 12:27:44.058286] Symbol map faces:
[073 12:27:44.058298] /home/junghan/.local/share/fonts/Symbols-2048-em Nerd Font Complete.ttf:0
 
# nwk : --no-window-system
alias nwk='TERM=kitty-direct emacsclient -s /home/junghan/spacemacs/server/spacemacs -nw'

caption=“<span class=“figure-number”>Figure 2: Emacs on Kitty” >

DONE How-to use unicode with emacs on kitty terminal

[2023-04-24 Mon 11:16]

  • 2023-04-25 정리하자면 emoji, unicode-fonts 는 사용할 필요 없다.

    • kitty 를 잘쓰려면 nerd-font 를 사용하라. sarasa term k nerd font
    • noto-color-emoji, noto-sans-symbols, noto-sans-symbols 2 를 사용하되, noto-color-emoji 는 반드시 ubuntu package 를 설치한다.

    방법을 알면 최신 이모지를 내 것으로 빌드 할 수 있다. 알았다. 주는거 써야 된다는 사실을. 다음 리포에 보면 빌드 스크립트가 있다. https://salsa.debian.org/fonts-team/fonts-noto-color-emoji

DONE emoji, unicode-fonts layer disabled

[2023-04-24 Mon 15:27] <~/spacemacs/elpa/29.0/develop/unicode-fonts-20220713.1837/unicode-fonts.el>

굉장히 중요한 주제다. 터미널 모드에서 유니코드를 사용하지 않는다?! 말도 안된다. 분명 이전에는 신경도 안썼지만. 터미널 모드를 제대로 사용하기 위해서는 필요하다.

앞서 터미널에서 nerd-icon 을 지원하게 하는 것과 유사한 목표다. 그건 별도의 패키지로 지원하는데 노가다로 아이콘 매핑을 해놓은 것이다. 물론 훌륭하다.

그렇다고 모든 유니코드를 그렇게 매핑 할 수는 없다. 그렇다면 어떻게 터미널에서 지원할 것인가? Noto Emoji 가 어디까지 커버하는지 알 고 싶다면

여기가서 해당 유니코드를 넣어보면 된다. “🐄” U+1F404 Cow Unicode Character 위의 소를 넣어보면 지원이 된다. 즉, 해당 영역은 커버된다는 말이다. 물론 커버가 안되는 부분도 있다. /home/junghan/spacemacs/elpa/29.0/develop/unicode-fonts-20220713.1837/unicode-fonts.el 위의 파일을 직접 수정했다. 일단 테스트 용도로 말이다. 폰트를 다뤄보니까 이 패키지는 필요가 없겠더라. 수동으로 잡아주는게 좋겠다.

DONE Emoji support (built-in)

엄청 까다롭다. 그러나 해냈다.

2023-04-25 한 번 더 최신 noto color emoji 로 해보았다. 안된다. 더 하지 말자. 하나 더 kitty 에 매핑을 해주는 대로 이맥스에서 반영이 된다. 🦄 01f984 의 예 에서 확인했다. 이제 확실히 터미널 모드와 통일 했다.

noto-color-emoji 동작한다. 아래에 적어 놓은 것 처럼 폰트가 보이지 않았다. 그러니 뭘 해도 안되는 것이었다. fontconfig 파일을 튜닝할 필요가 있다. 이전까지 관심도 없었던 부분이었다. 아무튼 noto-color-emoji 는 패키지로 설치하면 된다. 더 욕심 낼 것도 없다. noto-emoji 흑백은 중복이다 필요 없다. 지금 noto 시리즈로 설정한 것이 최선이다. 충분하다.

noto-emoji, noto-color-emoji 폰트를 font-manager 로 열어보면 보이지 않는다. 즉, 리눅스에서 지원이 안되는 것이다. 오히려 apple color emoji 가 지원이 된다. 그래서 루틴을 통일했다. 잘 된다. 더 삽질 하지 말자.

DONE Nerd Font Default on kitty

[2023-04-25 Tue 11:42] Nerd Symbols 매핑이 잘 안된다. 그냥 확실하게 너드 폰트를 쓰자. 이맥스도? 물론이다. 자기 폰트에 있는 녀석들은 불러 올 수 있긴한데 고민해보자.

DONE Terminal Mode and Emacs 28 Compatible Mode

[2023-04-14 Fri 13:06] 오 굳이 구이 모드에 집착할 필요가 없다.

  • 터미널 모드도 이미 나름대로 깔끔하다. 별 차이가 없을 정도다. 그리고 터미널 모드가 더 장점이 아닌가 싶다. kitty 를 사용하면 된다.
  • display 모드 전용으로 해놓은 것을 다 확인한다.
    • graphic 으로 검색 (when (display-graphic-p) ; gui (unless (display-graphic-p) ; terminal
    • spacemacs|do-after-display-system-init 검토 ->
  • Emacs 29 전용인 부분도 확인해서 바꾼다. (when (< emacs-major-version 29) ; emacs 28 (when (> emacs-major-version 28) ; emacs 29
  • terminal 모드에 방해되는 것들은 끈다
    • 예를 들어, 괄호 맞춰주는 패키지가 터미널에선 문제다.
  • treesitter 이슈는 어떻게? 29 전용 개발 패키지 관련 이슈
문제 있는 부분
jh-ui//korean-set-font-face: Can’t use fontsets in non-GUI frames [5 times]
command-execute: Wrong type argument: commandp, hydra-all/body [3 times]
 

DONE Sarasa Term K Nerd Font Regular on Termux

이 것만 termus 에 넣으면 된다. 근데 파일 사이즈가 너무 크지 않나?! “Sarasa Term K Nerd Font” 이걸 어디에 복사해야 하지?

~/.termux/font.ttf 로 복사를 하고 termux-reload-settings 하면 된다. 아니면 껐다 키던가.

폰 웹트 관련 -> 용량이 너무 크다.

Sarasa Gothic Nerd Font 에 웹 폰트까지 만들어 놨더라. GitHub - jonz94/Sarasa-Gothic-Nerd-Fonts: Nerd fonts patc… 근데 웹 폰트로 쓰기는 너무 용량이 크지 않나?!

28 , 29 버전 패키지 구분하는 방법

이 부분이 신경이 쓰인다. 작업하는 중. 큰문제가 없으면 28.3 버전에 안정화 가능할 듯. 터미널 버전도 커버 완벽하다. [2023-04-14 Fri 22:04]

터미널 버전에서 indentation 이 무너지는 문제?!

자동 인덴트가 문제를 만드는 것 같다. 수동으로 커버하자. [2023-04-14 Fri 22:06]

Emacs 버전, 사용 환경에 따라서 설정을 나누자

하나의 닷 리포로 관리를 하려면 결국 파일을 나눠서 사용할 수 밖에 없다. 그게 아니라면 브렌치를 나눠야 하는데 이건 아니다.

jh-coding 은 개발 베이스 그리고 각 언어는 나누자

[2023-04-15 Sat 13:26]

터미널 버전 키보드 문제

Function 과 방향키가 다 M-O 로 잡힌다. 왜?! M-O 키 바인딩은 사용하면 안된다. 지우면 다 해결! [2023-04-19 Wed 15:10]

DONE Migration to vanilla emacs on train

[2023-04-01 Sat 09:03] 일차로 hydra 까지 넣었다. 왜냐? puni 로 paredit 를 하려고 한다. 뭐 어렵게 생각하나 가볍게 쓰면 된다. 잠시 커피 한잔 사오자.