์ด ํค๋ณด๋ ๋จ์ถํค๋ ์ด๋ฏธ ์กด์ฌํ๋ ์ค์ ๋น ๋ฅด๊ฒ ํ์ํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ํํ์ง ์๋ ์ด์ ๊ฐ ์์ต๋๊น?
A: ์ด๊ฒ์ POSIX/UNIX์ ์ผ๋ฐ์ ์ธ ์ด๋ ๋ช ๋ น์ด ์๋๋๋ค. Linenoise๋ 100% POSIX์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์ ์ linenoise ์ฌ๋ณธ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ฝ์ต๋๋ค. linenoise๋ฅผ ์ฌ์ฉํ๋ ๋ง์ ์ฌ๋๋ค์ ์ด๋ฐ์ ๋ฐ ์ด์ ๋ก ๊ทธ๊ฒ์ ํดํนํฉ๋๋ค. ์ดํดํ๊ธฐ ์ฝ๊ณ ๋ชจ๋์ ๋๋ค.
๋ค์์ Win/Unix/Emacs์์ ์ ์ด ํค ์ฌ์ฉ์ ๋น๊ตํ๋ ์ฐจํธ์ ๋๋ค. https://en.wikipedia.org/wiki/Control_key
๋ฌด์์ ํ ๊น์?
linenoise.c์ 41๋ฒ ์ค์์ ์ปค์๊ฐ ์ ์ด๋๋ ๋ฐฉ์์ ๋ํ ๋ ผ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๋ผ์ธ # 768์์ ์ฐพ์ ์ ์์ต๋๋ค
์ ์ int linenoiseEdit(int stdin_fd, int stdout_fd, char *buf, size_t buflen, const char *prompt)
ํธ์ง ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ ์ด ๊ธฐ๋ฅ์ ์์ต๋๋ค.
๋ํ API ํธ์ถ๋ก ์ฌ๋ฌ ์ค ํธ์ง์ ์ผ์ผ ํฉ๋๋ค.
๋์์ด ๋์ จ๊ธธ ๋ฐ๋ผ๋ฉฐ ์ฆ๊ฑฐ์ด ์ถ์๊ฐ์ฌ์ ๋์ธ์! (์ด๋์ ์๋๋ผ๋ :-)
์ด๊ฒ์ #64 ๋ฐ #92์ ๊ฐ์ ์์ด๋์ด๋ฅผ ๋ํ๋ด๋ ๊ฒ์ ๋๊น, ์๋๋ฉด ๋ค๋ฅธ ๊ฒ์ ๋๊น?
๋๋ linenoise๊ฐ POSIX์ ์ํด ์ ์๋ ๋ผ์ธ ํธ์ง ๊ธฐ๋ฅ์ผ๋ก ์ ํ๋๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ vi/emacs/readline back-word ๋ฐ ์๋ฐฉํฅ ๋จ์ด ์ํ์ค). linenoise๊ฐ POSIX ํ๊ฒฝ์ ์์กดํ๋ค๋ ์ฌ์ค์ ์๊ฐํ ์๋ ์์ง๋ง ์ด๋ OS๋ณ ํธ์ถ์์ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ด์ผ ํ๋ค๋ ์๋ฏธ์ผ ๋ฟ์ ๋๋ค.
์๋ง๋ ๋ด๊ฐ ๋ช
ํํ์ง ์์์ ์ ์์ต๋๋ค. control+left๊ฐ ์ ์ด ๋ฌธ์์ ํด๋นํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค(ctrl+a๊ฐ \01์ ํด๋นํ๋ ๋ฐฉ์ ๋ฑ). ๋ง์ ํฐ๋ฏธ๋ ์๋ฎฌ๋ ์ดํฐ๋ ์ด์ ๋ํด ๋ค๋ฅธ ์ด์ค์ผ์ดํ ์ํ์ค๋ฅผ ์์ฑํฉ๋๋ค(์ \033[1;5D
๋๋ \033f
). ์ผ๋ถ ๋ผ์ธ ํธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ด๋ณ๋ก ์/๋ค๋ก ํ์ํ๊ธฐ ์ํด ๋ฐ์ธ๋ฉํฉ๋๋ค. ์ ์ด๋ ์ด๊ฒ์ด ์ด ๋ฌธ์ ๊ฐ ์์ฌํ๋ ๋ฐ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
POSIX๊ฐ ์ ์ํ๋(n't) ์ค ํธ์ง ์ด์ค์ผ์ดํ ์ํ์ค๋ฅผ ๋์ดํ๋ ํญ๋ชฉ์ ๋ฐ๊ฒฌํ๊ฑฐ๋ linenoise๊ฐ POSIX ํ์ค์ ์ผ๋ถ๊ฐ ์๋ ํญ๋ชฉ์ ๊ตฌํํ์ง ์๋๋ค๋ ๋ด์ฉ์ ๋ฐ๊ฒฌํ๋ค๋ฉด ์๋ ค์ฃผ์ธ์. ๋๋ ๊ทธ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
ํธ์ง: ์์์ ๋งํฌํ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ POSIX๋ฅผ ์ฐธ์กฐํ์ง๋ ์์ง๋ง ๊ทํ์ ์์ ์ ์ ๊ฒ ๊ฐ์ต๋๋ค. ํน๋ณํ ctrl+left/right๋ฅผ ์ฐฌ์ฑํ๋ ๊ฒ์ ์๋์ง๋ง ์ผ๋ถ ์ํ์ค๋ ๋์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ํ ์ด๋ ํค ์กฐํฉ ๋๋ readline ๋ฐ์ธ๋ฉ์ ์ ์ฒด ๋ชฉ๋ก์ด ์๋๋๋ค. readline์ esc-b/f(๋ฐ ๊ธฐํ ๋ ๊ธด ์ด์ค์ผ์ดํ ์ํ์ค)๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฑฐ๊ธฐ์ ๋์ด๋์ง ์์ back/forward-word์ ๋ฐ์ธ๋ฉํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
JelteF๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ ๋ ฅ ์ด์ค์ผ์ดํ ์ํ์ค linenoise ํธ๋ค ํ์ฅ๊ณผ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐ ํฉ๋๋ค (์: ํ์ดํ ํค๋ฅผ ๋๋ฅด๊ฑฐ๋ ์ญ์ ํ์ฌ ์์ฑ๋ ์ํ์ค). ์ถ๋ ฅ ์ด์ค์ผ์ดํ ์ํ์ค(์: ์ค์ ๋ก ์ปค์๋ฅผ ์ด๋ํ๊ธฐ ์ํด ์ถ๋ ฅ์ผ๋ก ์ ์ก๋ ์ํ์ค)๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. . ๋๋ termcap์ ๋ค๋ฃจ๋ ๊ฒ์ด linenoise์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ค๋ ๋ฐ ๋์ํ๊ณ , linenoise๊ฐ ์๋ ๊ทธ๋๋ก ์ ์ ์์ ๋ช ๋ น์ผ๋ก ๊ตฌํ๋๋ค๋ ์ฌ์ค์ ๊ฐ์ฌํฉ๋๋ค.
์๋ง๋ @JelteF ๋ ์ด ๊ธฐ๋ฅ ์์ฒญ์ด ์ ํํ ๋ฌด์์ ์๊ตฌํ๋์ง ๋ช ํํ ํ ์ ์์ ๊ฒ์ ๋๋ค. linenoiseEdit()์์ ๋ ๊ฐ์ ์ถ๊ฐ ์ํ์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ํ๋ฆด ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก ctrl-left
๋๋ ctrl-right
๋ฅผ ๋๋ ์ ๋ ํ ๋จ์ด๋ฅผ ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ค๋ ๊ฒฝ์ฐ(๊ฐ๊ฐ ํด๋นํ๋ ๊ธด ์ด์ค์ผ์ดํ ์ํ์ค \033[5;D
๋ฐ C
์ฌ์ฉ) OCaml ๋ฐ์ธ๋ฉ์ ํด๋น ํจ์น๊ฐ ์์ต๋๋ค. https://github.com/fxfactorial/ocaml-linenoise/commit/c3d130cd62419ed3e77203bea392b12830c3e593
@c-cube๋ ๋ง์์ด ๋ง๋ค์. ๋ฏธ๋ฆฌ ๋ต๋ณ๋๋ฆฌ์ง ๋ชปํด ์ฃ์กํฉ๋๋ค.
ํํ 1๋ ๋ฐ๋ฐ์ ์๋๋๋ฐ ์ธํฐ๋ท ์๊ฐ์ ์๋ฌด๊ฒ๋ ์๋๋ค์. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก linenoiseEdit()์๋ ์์ต๋๋ค. @c-cube ๊ฐ์ฌํฉ๋๋ค :+1: