kubeform.dev/terraform-backend-sdk@v0.0.0-20220310143633-45f07fe731c5/command/console_interactive.go (about) 1 //go:build !solaris 2 // +build !solaris 3 4 // The readline library we use doesn't currently support solaris so 5 // we just build tag it off. 6 7 package command 8 9 import ( 10 "fmt" 11 "io" 12 13 "kubeform.dev/terraform-backend-sdk/helper/wrappedreadline" 14 "kubeform.dev/terraform-backend-sdk/repl" 15 16 "github.com/chzyer/readline" 17 "github.com/mitchellh/cli" 18 ) 19 20 func (c *ConsoleCommand) modeInteractive(session *repl.Session, ui cli.Ui) int { 21 // Configure input 22 l, err := readline.NewEx(wrappedreadline.Override(&readline.Config{ 23 Prompt: "> ", 24 InterruptPrompt: "^C", 25 EOFPrompt: "exit", 26 HistorySearchFold: true, 27 })) 28 if err != nil { 29 c.Ui.Error(fmt.Sprintf( 30 "Error initializing console: %s", 31 err)) 32 return 1 33 } 34 defer l.Close() 35 36 for { 37 // Read a line 38 line, err := l.Readline() 39 if err == readline.ErrInterrupt { 40 if len(line) == 0 { 41 break 42 } else { 43 continue 44 } 45 } else if err == io.EOF { 46 break 47 } 48 49 out, exit, diags := session.Handle(line) 50 if diags.HasErrors() { 51 c.showDiagnostics(diags) 52 } 53 if exit { 54 break 55 } 56 57 ui.Output(out) 58 } 59 60 return 0 61 }