Closed hitzhangjie closed 3 years ago
the readline repo only reads a single line.
I found another repo, like https://github.com/chzyer/readline/blob/master/example/readline-multiline/readline-multiline.go, which supports read multiple lines. It looks like easy to support it.
If this feature meets the design of promptui?
ReadMultiLine bool
Now I don't think read multiple lines is a good idea, considering the use cases is limited and not convenient to modify the input.
Maybe launch an editor then read the content is better and easier.
I'll close this.
I wondered how to do this as well:
// GetMultiLineInput - an empty line terminated with a ctrl-D or ASCII Group Separator Ctrl-] and newline
func GetMultiLineInput(scn *bufio.Scanner) string {
var lines []string
terminator := false
for scn.Scan() {
line := scn.Text()
if len(line) == 1 {
// ASCII Group Separator (GS ^]): ctrl-]
if strings.HasSuffix(line, "\x1D") || strings.HasSuffix(line, "\x04") {
trimLine := strings.TrimSuffix(line, "\x1D")
if !(trimLine == "") {
lines = append(lines, trimLine)
}
terminator = true
break
}
}
lines = append(lines, line)
}
if err := scn.Err(); err != nil {
_, _ = fmt.Fprintln(os.Stderr, err)
return strings.Join(lines, "\n")
}
// If we didn't break out of the scan loop
// due to a Group Separator input character on an empty line
// then we need to append the last line that had the EOF (Ctrl-D) character
if !terminator {
lines = append(lines, scn.Text())
}
return strings.Join(lines, "\n")
}
If you drop the ASCII Group Separator Ctrl-]
requirement, you can simplify the code.
I use promptui to let user input the issue title and body, the body part contains multiple lines.
So I think it would be better to support multiple lines in our utility.
I don't know whether prompui has supported this feature or not.