ํฌ์ŠคํŠธ

๐Ÿ”€ sesh โ€” fzfยทzoxide๋กœ ์ฆ‰์„ tmux ์„ธ์…˜ ์ „ํ™˜ (๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ์—์„œ ํ”ผ์ปค๋กœ)

sesh๋Š” ์„ ์–ธํ˜• ์„ธ์…˜ ๋งค๋‹ˆ์ €(smugยทtmuxp)์™€ ๋‹ค๋ฅธ ๋ฒ”์ฃผ๋‹ค โ€” ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“œ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ๋””๋ ‰ํ† ๋ฆฌยทgit repo์—์„œ ์„ธ์…˜์„ ์ฆ‰์„์œผ๋กœ ์—ด๊ณ  ์ „ํ™˜ํ•˜๋Š” ํ”ผ์ปค. ์„ค์น˜ยทprefix+T ๋ฐ”์ธ๋”ฉยทํ•ต์‹ฌ CLI์™€, smug์—์„œ ์˜ฎ๊ธฐ๋ฉฐ ๋ฐฐ์šด '๋ฒ”์ฃผ ์˜ค์„ ํƒ'๊นŒ์ง€.

๐Ÿ”€ sesh โ€” fzfยทzoxide๋กœ ์ฆ‰์„ tmux ์„ธ์…˜ ์ „ํ™˜ (๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ์—์„œ ํ”ผ์ปค๋กœ)

sesh(session์˜ ์ถ•์•ฝ)๋Š” tmux ์„ธ์…˜ ๋งค๋‹ˆ์ €์ง€๋งŒ, smugยทtmuxp ๊ฐ™์€ ์„ ์–ธํ˜• ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ์™€๋Š” ๋‹ค๋ฅธ ๋ฒ”์ฃผ๋‹ค. ์ €๋“ค์ด โ€œ์ด๋Ÿฐ ๋ ˆ์ด์•„์›ƒ์˜ ์„ธ์…˜์„ ๋งŒ๋“ค์–ด๋ผโ€œ๋ผ๋ฉด, sesh๋Š” โ€œ์ง€๊ธˆ ์žˆ๋Š”(๋˜๋Š” ํ•„์š”ํ•œ) ์„ธ์…˜์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋„˜์–ด๊ฐ€๋ผโ€œ๋‹ค. fzf(fuzzy finder)์™€ zoxide(์ž์ฃผ ๊ฐ€๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ•™์Šตํ•ด ์ ํ”„)๋ฅผ ์—ฎ์–ด, ๋””๋ ‰ํ† ๋ฆฌยทgit repo์—์„œ ์„ธ์…˜์„ ์ฆ‰์„์œผ๋กœ ์—ด๊ณ  ์ „ํ™˜ํ•˜๋Š” ๋ฐ ํŠนํ™”๋ผ ์žˆ๋‹ค.

์ด ๊ธ€์€ tmux ์„ธ์…˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๊ธ€์ด โ€œ์Šค์ฝ”ํ”„ ๋ฐ–์ด์ง€๋งŒ ๋ฐฉํ–ฅ์€ ์•Œ์•„๋‘˜ ๊ฒƒโ€์ด๋ผ๋ฉฐ ์˜ˆ๊ณ ํ–ˆ๋˜ ์˜จ๋””๋งจ๋“œ ์„ธ์…˜ ์Šค์œ„์ฒ˜์˜ ๋ณธํŽธ์ด๋‹ค. ๊ณ ์ • ๋ ˆ์ด์•„์›ƒ์„ ์„ ์–ธํ•˜๋Š” ๊ทธ ๊ธ€๊ณผ ๋ชฉ์ ์ด ๋‹ค๋ฅด๋‹ค. ์ „์ฒด ํ•™์Šต ์ˆœ์„œ๋Š” tmux ๋กœ๋“œ๋งต.

๋‘ ๋ฒ”์ฃผ โ€” ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ vs ํ”ผ์ปค

์„ธ์…˜ ์ž๋™ํ™”๋ฅผ ์–˜๊ธฐํ•  ๋•Œ ํ”ํžˆ ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๋ฌถ์ง€๋งŒ, ์‹ค์€ ๋ชฉ์ ์ด ๋‹ค๋ฅธ ๋‘ ์ถ•์ด๋‹ค.

ย ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ (smugยทtmuxpยทtmuxinator)ํ”ผ์ปค/์Šค์œ„์ฒ˜ (sesh)
ํ•˜๋Š” ์ผ์„ธ์…˜ยท์œˆ๋„์šฐยทํŒจ๋„ ๋ ˆ์ด์•„์›ƒ์„ ์„ ์–ธ โ†’ ์ƒ์„ฑ๋””๋ ‰ํ† ๋ฆฌยท์„ธ์…˜ ์‚ฌ์ด๋ฅผ ์ฆ‰์„ ์ „ํ™˜
์ž…๋ ฅYAML config (ํŒŒ์ผ ํ•˜๋‚˜ = ์„ธ์…˜ ํ•˜๋‚˜)fzf ๋ชฉ๋ก์—์„œ ๊ณ ๋ฅด๊ธฐ (config ์—†์–ด๋„ ๋จ)
๋Œ€ํ‘œ ๋™์ž‘smug start dev โ†’ 3-pane ๋ ˆ์ด์•„์›ƒ ๋ถ€ํŒ…prefix+T โ†’ ํด๋” ๊ณ ๋ฅด๋ฉด ๊ทธ ์„ธ์…˜์œผ๋กœ ์ ํ”„
๊ฐ•์ ๋ณต์žกํ•œ ๋‹ค์ค‘ ํŒจ๋„ ๋ฐฐ์น˜์˜ ์žฌํ˜„ํ”„๋กœ์ ํŠธ ์ˆ˜์‹ญ ๊ฐœ๋ฅผ ์˜ค๊ฐˆ ๋•Œ์˜ ์†๋„

๋‘˜์€ ๊ฒฝ์Ÿ์ด ์•„๋‹ˆ๋ผ ์ƒํ˜ธ ๋ณด์™„์ด๋‹ค. โ€œ์ •ํ•ด์ง„ ๋ ˆ์ด์•„์›ƒ์„ ๋ฐ˜๋ณต ๋กœ๋“œโ€๊ฐ€ ํ•„์š”ํ•˜๋ฉด ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ, โ€œ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์™•๋ณตโ€์ด ํ•„์š”ํ•˜๋ฉด ํ”ผ์ปค๋‹ค. sesh๋Š” ์‹ฌ์ง€์–ด ์„ ์–ธํ˜•์ด ํ•„์š”ํ•œ ์„ธ์…˜์€ tmuxp/tmuxinator ์Šคํฌ๋ฆฝํŠธ์— ์œ„์ž„ํ•  ์ˆ˜๋„ ์žˆ์–ด์„œ, ํ”ผ์ปค๋ฅผ ์•ž๋‹จ์— ๋‘๊ณ  ๋’ค์— ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ๋ฅผ ๋ถ™์ด๋Š” ์กฐํ•ฉ๋„ ๋œ๋‹ค.

์„ค์น˜ + tmux ๋ฐ”์ธ๋”ฉ

Homebrew ํ•œ ์ค„์ด๋ฉด ๋๋‚œ๋‹ค. sesh๋Š” Go ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ผ ๋Ÿฐํƒ€์ž„ ์˜์กด์ด ์—†๋‹ค.

1
brew install sesh

ํ•ต์‹ฌ ์˜์กด์€ fzf(ํ”ผ์ปค UI)์™€ zoxide(๋””๋ ‰ํ† ๋ฆฌ ์ ํ”„)๋‹ค. ๋‘˜ ๋‹ค ์ด๋ฏธ ๊น”๋ ค ์žˆ๋‹ค๋ฉด sesh๋Š” ๋ฐ”๋กœ ํ’€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ˆ๋‹ค. ํ”ผ์ปค๋ฅผ ํŒ์—…์œผ๋กœ ๋„์šฐ๋ ค๋ฉด fzf์— ๋”ธ๋ ค ์˜ค๋Š” fzf-tmux, ๋””๋ ‰ํ† ๋ฆฌ ๊ฒ€์ƒ‰ ์†Œ์Šค์—” fd๊ฐ€ ์“ฐ์ธ๋‹ค.

sesh์˜ ์ผ์ƒ์€ ์‚ฌ์‹ค์ƒ tmux ํ‚ค ํ•˜๋‚˜๋กœ ์ˆ˜๋ ดํ•œ๋‹ค. ~/.tmux.conf(๋˜๋Š” Oh my tmux! ์‚ฌ์šฉ์ž๋Š” .tmux.conf.local)์— ํ”ผ์ปค๋ฅผ prefix + T์— ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.

# sesh session picker โ€” prefix+T; ํŒ์—… ์•ˆ: ^a ์ „์ฒด ^t tmux ^g ์„ค์ • ^x zoxide ^f ๋””๋ ‰ํ† ๋ฆฌ, ^d kill
bind-key T run-shell "sesh connect \"$(
  sesh list --icons | fzf-tmux -p 80%,70% \
    --no-sort --ansi --border-label ' sesh ' --prompt 'โšก  ' \
    --header '  ^a all ^t tmux ^g configs ^x zoxide ^d kill ^f find' \
    --bind 'tab:down,btab:up' \
    --bind 'ctrl-a:change-prompt(โšก  )+reload(sesh list --icons)' \
    --bind 'ctrl-t:change-prompt(๐ŸชŸ  )+reload(sesh list -t --icons)' \
    --bind 'ctrl-g:change-prompt(โš™๏ธ  )+reload(sesh list -c --icons)' \
    --bind 'ctrl-x:change-prompt(๐Ÿ“  )+reload(sesh list -z --icons)' \
    --bind 'ctrl-f:change-prompt(๐Ÿ”Ž  )+reload(fd -H -d 2 -t d -E .Trash . ~)' \
    --bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(โšก  )+reload(sesh list --icons)' \
    --preview-window 'right:55%' \
    --preview 'sesh preview {}'
)\""

prefix+T๋ฅผ ๋ˆ„๋ฅด๋ฉด ํŒ์—…์ด ๋œจ๊ณ , ํŒ์—… ์•ˆ์—์„œ ์†Œ์Šค๋ฅผ ์ „ํ™˜ํ•œ๋‹ค โ€” ^a ์ „์ฒด, ^t ์—ด๋ ค ์žˆ๋Š” tmux ์„ธ์…˜, ^g sesh ์„ค์ • ์„ธ์…˜, ^x zoxide ๋””๋ ‰ํ† ๋ฆฌ, ^f fd๋กœ ํ™ˆ ์•„๋ž˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒ€์ƒ‰, ^d๋กœ ์„ธ์…˜ kill. ๊ณ ๋ฅด๋ฉด ๊ทธ ํด๋”๋กœ ์„ธ์…˜์„ ๋งŒ๋“ค๊ฑฐ๋‚˜(์—†์œผ๋ฉด) ์ ํ”„ํ•œ๋‹ค(์žˆ์œผ๋ฉด).

tmux ์„ค์ • ์•ˆ์˜ $(...)๋Š” ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ๋ง ๊ฒƒ. run-shell์ด ๋ฌธ์ž์—ด์„ /bin/sh์— ๋„˜๊ฒจ ๊ฑฐ๊ธฐ์„œ ํ‰๊ฐ€ํ•˜๋ฏ€๋กœ \$(๋กœ ์“ฐ๋ฉด ๊นจ์ง„๋‹ค. ๋˜ ์ด ์Šค๋‹ˆํŽซ์„ chezmoi ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ๋„๊ตฌ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๋ฉด, {2..}ยท$()๊ฐ€ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ•๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ํ•ด๋‹น ํŒŒ์ผ์„ ํ…œํ”Œ๋ฆฟ(.tmpl) ๋ฐ–์— ๋‘๋Š” ๊ฒŒ ์•ˆ์ „ํ•˜๋‹ค.

์ž์ฃผ ์“ฐ๋Š” CLI

ํ”ผ์ปค๊ฐ€ 90%์ง€๋งŒ, ํ„ฐ๋ฏธ๋„์—์„œ ์ง์ ‘ ๋ถ€๋ฅด๋Š” ๋ช…๋ น ๋ช‡ ๊ฐœ๊ฐ€ ์†์— ๋ถ™์œผ๋ฉด ๋” ๋น ๋ฅด๋‹ค.

1
2
3
4
5
sesh connect <์ด๋ฆ„/๊ฒฝ๋กœ>   # ์„ธ์…˜์— ์—ฐ๊ฒฐ(์—†์œผ๋ฉด ์ƒ์„ฑ). ๋ถ€๋ถ„ ๊ฒฝ๋กœ๋„ ๋จน์Œ
sesh last                  # ์ง์ „ ์„ธ์…˜์œผ๋กœ ํ† ๊ธ€ โ€” ๋‘ ํ”„๋กœ์ ํŠธ ์™•๋ณต์— ์ตœ๊ณ 
sesh clone <git-url>       # repo ํด๋ก  + ๊ทธ ์„ธ์…˜์œผ๋กœ ๋ฐ”๋กœ ์ง„์ž…
sesh list                  # ์„ธ์…˜ ๋ชฉ๋ก (-t tmux๋งŒ, -z zoxide, -c ์„ค์ •๋œ ๊ฒƒ)
sesh connect -c "<๋ช…๋ น>" <๊ฒฝ๋กœ>  # ์ƒˆ ์„ธ์…˜ ์—ด๋ฉฐ ๋ช…๋ น ์‹คํ–‰(๊ธฐ์กด ์„ธ์…˜์ด๋ฉด ๋ฌด์‹œ)

ํŠนํžˆ sesh last๋Š” tmux ์ž์ฒด์˜ โ€œ์ด์ „ ์„ธ์…˜(prefix + L)โ€๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, sesh๊ฐ€ ๋งŒ๋“  ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ๋ฐ˜ ์„ธ์…˜๊นŒ์ง€ ํฌํ•จํ•ด ํ† ๊ธ€ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ๋‘ ๊ฐœ๋ฅผ ๋ถ™์žก๊ณ  ์˜ค๊ฐˆ ๋•Œ ์ฒด๊ฐ์ด ํฌ๋‹ค.

์„ค์ • ํŒŒ์ผ์€ ์„ ํƒ์ด๋‹ค

์—ฌ๊ธฐ์„œ ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ์™€์˜ ์ฐจ์ด๊ฐ€ ๋‹ค์‹œ ๋“œ๋Ÿฌ๋‚œ๋‹ค. sesh๋Š” config ํŒŒ์ผ ์—†์ด๋„ ์™„์ „ํžˆ ๋™์ž‘ํ•œ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌยทzoxideยท์—ด๋ฆฐ tmux ์„ธ์…˜์„ ์†Œ์Šค๋กœ ์‚ผ์•„ ํ”ผ์ปค๊ฐ€ ์ฑ„์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. smug์ฒ˜๋Ÿผ โ€œconfig๋ฅผ ๋จผ์ € ์จ์•ผ ์“ธ ์ˆ˜ ์žˆ๋Š”โ€ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

~/.config/sesh/sesh.toml์€ ์•„๋ž˜๊ฐ€ ํ•„์š”ํ•ด์งˆ ๋•Œ ๋„์ž…ํ•˜๋ฉด ๋œ๋‹ค.

1
2
3
4
5
6
7
8
9
# ์ด๋ฆ„ ๋ถ™์€ ์„ธ์…˜ + ์„ธ์…˜๋ณ„ ์‹œ์ž‘ ๋ช…๋ น
[[session]]
name = "dotfiles"
path = "~/dotfiles"
startup_command = "nvim ."

# ํ”ผ์ปค์—์„œ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ ์ˆจ๊ธฐ๊ธฐ
[blacklist]
paths = ["~/Downloads"]

์ฆ‰ ํ•„์š”๊ฐ€ ์ƒ๊ธด ๋’ค์— ์„ค์ •์„ ๋ถ™์ด๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ธ์…˜์„ ๋‹ค ์„ ์–ธํ•ด๋‘๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ์™€ ์ •๋ฐ˜๋Œ€์˜ ์›Œํฌํ”Œ๋กœ๋‹ค.

smug์—์„œ ์˜ฎ๊ธด ์ด์œ  โ€” ๋ฒ”์ฃผ๋ฅผ ์ž˜๋ชป ๊ณจ๋ž์—ˆ๋‹ค

๋‚ด๊ฐ€ ์›๋ž˜ ์“ฐ๋˜ smug config๋Š” ์ด๊ฒŒ ์ „๋ถ€์˜€๋‹ค.

1
2
3
4
5
6
7
8
# ~/.config/smug/dev.yml
session: dev
root: ~/
windows:
  - name: dev
    layout: even-horizontal
    commands:
      - claude       # ์™ผ์ชฝ pane์—์„œ ์ž๋™ ์‹คํ–‰

์ขŒ์šฐ๋กœ ๋‚˜๋ˆ„๊ณ  ์™ผ์ชฝ์—์„œ ๋ช…๋ น ํ•˜๋‚˜ ์‹คํ–‰ โ€” ์ด๊ฑด ๋ ˆ์ด์•„์›ƒ์„ ์žฌํ˜„ํ•˜๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์ด ์•„๋‹ˆ๋ผ, ๊ทธ๋ƒฅ โ€œ๊ทธ ํด๋”๋กœ ์„ธ์…˜ ํ•˜๋‚˜ ์—ฌ๋Š”โ€ ์ ํ”„์— ๊ฐ€๊นŒ์› ๋‹ค. smug์˜ ์ง„์งœ ๊ฐ•์ (๋ณต์žกํ•œ ๋‹ค์ค‘ ํŒจ๋„ ๋ฐฐ์น˜๋ฅผ layout ๋ฌธ์ž์—ด๊นŒ์ง€ ์จ์„œ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ)์€ ํ•˜๋‚˜๋„ ์•ˆ ์“ฐ๊ณ  ์žˆ์—ˆ๋˜ ์…ˆ์ด๋‹ค. ๋„๊ตฌ๋ฅผ ๋ฒ”์ฃผ๋ถ€ํ„ฐ ์ž˜๋ชป ๊ณ ๋ฅธ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ sesh๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ ์ด config๋Š” ๋ฒ„๋ ธ๋‹ค. pane ๋ถ„ํ• ๊ณผ ๋ช…๋ น ์ž๋™ ์‹คํ–‰์ด๋ผ๋Š” โ€œ๋ ˆ์ด์•„์›ƒโ€์€ ์‚ฌ๋ผ์ง€์ง€๋งŒ, ์• ์ดˆ์— ๋‚ด๊ฐ€ ์›ํ•œ ๊ฑด ๋ ˆ์ด์•„์›ƒ์ด ์•„๋‹ˆ๋ผ ๋น ๋ฅธ ์„ธ์…˜ ์ „ํ™˜์ด์—ˆ์œผ๋‹ˆ ์†ํ•ด๊ฐ€ ์•„๋‹ˆ๋ผ ์ •๋ฆฌ๋‹ค. ๋ช…๋ น ์ž๋™ ์‹คํ–‰์ด ํŠน์ • ํด๋”์—๋งŒ ๋‹ค์‹œ ํ•„์š”ํ•ด์ง€๋ฉด ๊ทธ๋•Œ sesh.toml์˜ startup_command ํ•œ ์ค„์ด๋‚˜ sesh connect -c๋กœ ๋˜์‚ด๋ฆฌ๋ฉด ๋œ๋‹ค โ€” YAML์„ ๋ฏธ๋ฆฌ ์œ ์ง€ํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค.

๊ตํ›ˆ์€ ๋„๊ตฌ ๋น„๊ตํ‘œ๋ณด๋‹ค ๋ฒ”์ฃผ ์„ ํƒ์ด ๋จผ์ €๋ผ๋Š” ๊ฒƒ์ด๋‹ค. โ€œ์„ธ์…˜ ๋งค๋‹ˆ์ € ๋ญ ์“ฐ์ง€โ€์˜ ๋‹ต์€ smug๋ƒ tmuxp๋ƒ ์ด์ „์—, ๋ ˆ์ด์•„์›ƒ์„ ์„ ์–ธํ•˜๊ณ  ์‹ถ์€๊ฐ€(๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ) vs ์„ธ์…˜์„ ๋น ๋ฅด๊ฒŒ ์˜ค๊ฐ€๊ณ  ์‹ถ์€๊ฐ€(ํ”ผ์ปค)๋ฅผ ๋จผ์ € ๊ฐ€๋ฅด๋Š” ๋ฐ ์žˆ๋‹ค.

์ •๋ฆฌ

  • sesh๋Š” ์„ ์–ธํ˜• ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ๊ฐ€ ์•„๋‹ˆ๋ผ fzfยทzoxide ๊ธฐ๋ฐ˜ ํ”ผ์ปค/์Šค์œ„์ฒ˜๋‹ค. ๋‹ค๋ฅธ ์ถ•์ด๊ณ , ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ์™€ ๋ณ‘ํ–‰๋„ ๋œ๋‹ค.
  • ์ผ์ƒ์€ prefix + T ํ•˜๋‚˜. CLI๋Š” connect/last/clone ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.
  • config๋Š” ์„ ํƒ โ€” ์—†์–ด๋„ ๋Œ๊ณ , ์ด๋ฆ„ ์„ธ์…˜ยท์‹œ์ž‘ ๋ช…๋ นยทblacklist๊ฐ€ ํ•„์š”ํ•ด์ง€๋ฉด ๊ทธ๋•Œ sesh.toml์„ ๋ถ™์ธ๋‹ค.
  • โ€œ์„ธ์…˜ ๋งค๋‹ˆ์ € ๋ญ ์“ฐ์ง€โ€๋ณด๋‹ค โ€œ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์ด ํ•„์š”ํ•œ๊ฐ€, ์ ํ”„๊ฐ€ ํ•„์š”ํ•œ๊ฐ€โ€๋ฅผ ๋จผ์ € ๋ฌผ์–ด๋ผ. ๋ฒ”์ฃผ๊ฐ€ ๋งž์•„์•ผ ๋„๊ตฌ ๋น„๊ต๊ฐ€ ์˜๋ฏธ ์žˆ๋‹ค.

๋ฐ˜๋Œ€ ๋ฒ”์ฃผ โ€” ๋ณต์žกํ•œ ๋‹ค์ค‘ ํŒจ๋„ ๋ ˆ์ด์•„์›ƒ์„ ์„ ์–ธํ•ด ์žฌํ˜„ํ•˜๋Š” ์ชฝ์€ smug ์‹ฌํ™” ๊ธ€๊ณผ ์„ธ์…˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์—์„œ. ์„ธ ๋„๊ตฌ(smugยทtmuxpยทtmuxinator) ๋น„๊ต์™€ ์กฐ๊ฑด๋ถ€ ์ˆœ์œ„๋„ ๊ทธ ๊ธ€์— ์žˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.