Golang 터미널 대화형 프롬프트 go-prompt 라이브러리 알아보기
오늘은 Golang으로 터미널에서 대화형 프롬프트를 만들 수 있는 go-prompt 라이브러리를 알아보려 합니다.
go-prompt 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
go get으로 github에서 호스팅되고 있는 go-prompt 패키지를 설치합니다.
go get github.com/c-bata/go-prompt
홈의 go 폴더에 go-prompt 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"fmt"
"os"
"os/exec"
prompt "github.com/c-bata/go-prompt"
)
fmt와 go-prompt를 가져오고, 추가로 bash를 실행하는 예제 코드를 위해 os도 추가로 가져옵니다.
func executor(text string) {
fmt.Println(text)
executor 함수를 구현하고 들어온 문자열을 그대로 출력하게 작성합니다.
if text == "bash" {
cmd := exec.Command("bash")
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()
}
return
}
만약 bash라고 입력되면 exec로 수행되어 실제 bash 환경이 구동됩니다.
func completer(text prompt.Document) []prompt.Suggest {
suggest := []prompt.Suggest{
{Text: "english", Description: "english Description"},
{Text: "한국어", Description: "한국어 설명"},
{Text: "bash"},
}
completer 함수를 구현하고 제안할 문장을 작성합니다.
return prompt.FilterHasPrefix(suggest, text.GetWordBeforeCursor(), true)
}
입력한 문장으로 커서의 앞에 존재하는 단어가 미리 설정한 제안하는 단어(prompt.Suggest)로 시작하는지 여부를 확인하는 함수를 반환합니다.
func main() {
mainPrompt := prompt.New(
executor,
completer,
prompt.OptionTitle("prompt"),
prompt.OptionPrefixTextColor(prompt.White),
prompt.OptionPreviewSuggestionTextColor(prompt.Blue),
prompt.OptionSelectedSuggestionBGColor(prompt.LightGray),
prompt.OptionSuggestionBGColor(prompt.DarkGray),
)
mainPrompt.Run()
}
메인 함수에서는 미리 작성한 executor, completer 함수로 prompt 객체를 만드는 데에 사용합니다.
Option 접두사가 붙은 메소드를 생성하여 타이틀이나 색상 설정을 진행할 수 있습니다.
Written on August 4, 2019