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  }