C-c C-l
์ฌ์ฉํ์ฌ REPL์ ์ด๋ฉด ์์ฑ๋๋ ์ฐฝ์ด ํน๋ณํด ๋ณด์
๋๋ค(์ด๋์ด ๋ฐฐ๊ฒฝ, ๋ซํ ๋ ํ๋ก์ธ์ค ์ข
๋ฃ, ...).
๊ทธ๊ฒ์ ๋ํ ํญ์ ๋ด ํ๋ฉด์ ์ํ์ผ๋ก ๋ถํ ํ๋ ๊ฒ ๊ฐ์ผ๋ฉฐ ๋๋ก๋ ์ ์ฉํ๊ณ ๋๋ก๋ ์ฑ๊ฐ์ญ๋๋ค. emacs์ ๋ํด ์ถฉ๋ถํ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด ์ฐฝ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
switch-buffer ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ๋ ์์์ ๊ฐ์ ธ์ค๋๋ก ๊ด๋ฆฌํ์ง๋ง ๋ฒํผ๊ฐ ์๋ ํ๋ก์ธ์ค์ ๋ชจ๋ ํ๋ ์์ ์ฃฝ์ด๊ธฐ ๋๋ฌธ์ ์๋ณธ ํ๋ ์์ ๋ซ์ ์ ์์ต๋๋ค.
์ด ํน์ ๋ฒํผ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๊ณ ์ด๋ป๊ฒ ํ์๋๋์ง ์๋ ค์ฃผ์ค ์ ์๋์? :(
๊ฐ์ฌ ํด์!
ํ ์ฌ๊ธฐ ์์ง์ด๋ ๋ถ๋ถ์ด ๋ง๊ตฐ์. C-c C-l
๋ฌถ์ธ ๋ด์ฉ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. +eval/repl
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ repl์ ์์ํ์ง ์๋ ๊ฒฝ์ฐ Doom์ repl ๋ฒํผ๋ฅผ ์ผ๋ฐ ํน์ ๋ฒํผ์ฒ๋ผ ์ทจ๊ธํฉ๋๋ค.
์ด ๊ฒฝ์ฐ ๋ ๊ฐ์ ๊ด๋ จ ๋ณ์๋ shackle-default-alignment
๋ฐ shackle-rules
์ด๋ฉฐ, ์ด๋ Emacs์๊ฒ ํน์ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ์ฐฝ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค.
shackle-rules
์ ๋์ ๋ ๊ฐ์ง ํฌ๊ด ๊ท์น์ด ์์ต๋๋ค.
(set! :popup
'("^\\*" :regexp t :noselect t :autokill t)
'("^ \\*" :regexp t :size 12 :noselect t :autokill t :autoclose t))))
์ฌ๊ธฐ์ ๋ ๊ฐ์ง ๋ฌธ์ ๋ :autokill t
(๋ฒํผ์ ๊ด๋ จ ํ๋ก์ธ์ค๊ฐ ํจ๊ป ์ข
๋ฃ๋จ์ ๋ณด์ฅ)์ด๋ฉฐ :align
์ง์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก shackle-default-alignment
์ ์์กดํฉ๋๋ค. 'below
.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๋ค์์ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
ํนํ repl์ ๋ํ ์ฐ์ ์ ์ฉ ๊ท์น์ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
(set! :popup "*my-repl-buffer*" :align 'left :noesc t)
์์ธํ ๋ด์ฉ์ M-x doom/describe-setting RET :popup
๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๊ทํ์ repl์์ +eval-repl-mode
๋ถ ๋ชจ๋๋ฅผ ํ์ฑํํ์ญ์์ค:
(add-hook 'inferior-python-mode-hook #'+eval-repl-mode)
์ด ํ์ ๊ท์น์ modules/feature/eval/config.el ์์ ์ฐพ์ ์ ์์ต๋๋ค.
(set! :popup
'(:custom (lambda (b &rest _) (buffer-local-value '+eval-repl-mode b)))
:size 16 :noesc t)
C-c C-l
๋ฅผ +eval/repl
๋ฐ์ธ๋ฉํ๊ณ ๋์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ repl์ ํธ์ถํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ชจ๋์๋ ์ ์ ํ ๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๋ค. ์ํ๋ repl์ด ์ด๋ฆฌ์ง ์์ผ๋ฉด :repl
์ค์ ์ผ๋ก major-mode->repl ์ฐ๊ฒฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด
(set! :repl 'python-mode #'+python/repl)
:repl์ด ์ํ๋ ํจ์๋ repl์ ํฌํจํ๋ ๋ฒํผ๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
์, ์ธ๊ธํ๋ ๊ฒ์ ์์์ต๋๋ค. ํ์ฌ ๋ผ์ด๋ธ ํ์ ์ฐฝ์ ์ด๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค(ํ์ํ ์ ์ด ์์ต๋๋ค). ๊ทธ๊ฒ์ ๋ด๊ฐ ํด๊ฒฐํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ํ์๋ก ํ๋ ๋ชจ๋ ๋์์ธ ๊ฒ ๊ฐ์ต๋๋ค!
๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ฉด intero
REPL์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์์ต๋๋ค. intero-repl-load
๋ผ๋ ๋ช
๋ น์ผ๋ก ์์ํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ด๋ค ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋์ง ๋ชจ๋ฆ
๋๋ค.
๋๋ ๊ฒฐ๊ตญ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ค.
(set! :popup "^\\*intero:" :regexp t :align 'right :size 80)
๋ด modules/private/ptival/init.el
์์ ๋งค๋ ฅ์ฒ๋ผ ์๋ํ์ต๋๋ค!
์๊ฐ์ ๋ด์ด ์ด ๋ชจ๋ ๊ฒ์ ์ค๋ช ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ํฉ๋ฆฌ์ ์ธ ์๊ฐ ์์ ํผ์์ ์ด๊ฒ์ ์์ ๋์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค! ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ ์ฌ๊ธฐ ์์ง์ด๋ ๋ถ๋ถ์ด ๋ง๊ตฐ์.
C-c C-l
๋ฌถ์ธ ๋ด์ฉ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.+eval/repl
๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ repl์ ์์ํ์ง ์๋ ๊ฒฝ์ฐ Doom์ repl ๋ฒํผ๋ฅผ ์ผ๋ฐ ํน์ ๋ฒํผ์ฒ๋ผ ์ทจ๊ธํฉ๋๋ค.์ด ๊ฒฝ์ฐ ๋ ๊ฐ์ ๊ด๋ จ ๋ณ์๋
shackle-default-alignment
๋ฐshackle-rules
์ด๋ฉฐ, ์ด๋ Emacs์๊ฒ ํน์ ๊ธฐ์ค์ ์ถฉ์กฑํ๋ ์ฐฝ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ ค์ค๋๋ค.shackle-rules
์ ๋์ ๋ ๊ฐ์ง ํฌ๊ด ๊ท์น์ด ์์ต๋๋ค.์ฌ๊ธฐ์ ๋ ๊ฐ์ง ๋ฌธ์ ๋
:autokill t
(๋ฒํผ์ ๊ด๋ จ ํ๋ก์ธ์ค๊ฐ ํจ๊ป ์ข ๋ฃ๋จ์ ๋ณด์ฅ)์ด๋ฉฐ:align
์ง์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋กshackle-default-alignment
์ ์์กดํฉ๋๋ค.'below
.์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
๋ค์์ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
ํนํ repl์ ๋ํ ์ฐ์ ์ ์ฉ ๊ท์น์ ์ง์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์์ธํ ๋ด์ฉ์
M-x doom/describe-setting RET :popup
๋ฅผ ์ฐธ์กฐํ์ญ์์ค.๊ทํ์ repl์์
+eval-repl-mode
๋ถ ๋ชจ๋๋ฅผ ํ์ฑํํ์ญ์์ค:(add-hook 'inferior-python-mode-hook #'+eval-repl-mode)
์ด ํ์ ๊ท์น์ modules/feature/eval/config.el ์์ ์ฐพ์ ์ ์์ต๋๋ค.
C-c C-l
๋ฅผ+eval/repl
๋ฐ์ธ๋ฉํ๊ณ ๋์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ repl์ ํธ์ถํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ชจ๋์๋ ์ ์ ํ ๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๋ค. ์ํ๋ repl์ด ์ด๋ฆฌ์ง ์์ผ๋ฉด:repl
์ค์ ์ผ๋ก major-mode->repl ์ฐ๊ฒฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด(set! :repl 'python-mode #'+python/repl)
:repl์ด ์ํ๋ ํจ์๋ repl์ ํฌํจํ๋ ๋ฒํผ๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!