From b5614f3ebcb0fd9167ead2627b066d50555a780d Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Sat, 23 Sep 2023 17:20:30 -0700 Subject: [PATCH] fix end-of-line issue with the new prompt (#582) --- cmd/cmd.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 6c2bb0b5..9ab260c8 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -33,15 +33,22 @@ import ( ) type Painter struct { - HideHint bool + IsMultiLine bool } func (p Painter) Paint(line []rune, _ int) []rune { termType := os.Getenv("TERM") - if termType == "xterm-256color" && len(line) == 0 && !p.HideHint { - prompt := "Send a message (/? for help)" + if termType == "xterm-256color" && len(line) == 0 { + var prompt string + if p.IsMultiLine { + prompt = "Use \"\"\" to end multi-line input" + } else { + prompt = "Send a message (/? for help)" + } return []rune(fmt.Sprintf("\033[38;5;245m%s\033[%dD\033[0m", prompt, len(prompt))) } + // add a space and a backspace to prevent the cursor from walking up the screen + line = append(line, []rune(" \b")...) return line } @@ -579,7 +586,7 @@ func generateInteractive(cmd *cobra.Command, model string) error { case isMultiLine: if strings.HasSuffix(line, `"""`) { isMultiLine = false - painter.HideHint = false + painter.IsMultiLine = isMultiLine multiLineBuffer += strings.TrimSuffix(line, `"""`) line = multiLineBuffer multiLineBuffer = "" @@ -590,9 +597,9 @@ func generateInteractive(cmd *cobra.Command, model string) error { } case strings.HasPrefix(line, `"""`): isMultiLine = true + painter.IsMultiLine = isMultiLine multiLineBuffer = strings.TrimPrefix(line, `"""`) + " " scanner.SetPrompt("... ") - painter.HideHint = true continue case strings.HasPrefix(line, "/list"): args := strings.Fields(line)