Use a pager for the help interactive command as well

This commit is contained in:
Kovid Goyal 2022-11-16 20:44:13 +05:30
parent 5e880b92f5
commit a4e43b3925
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 21 additions and 15 deletions

View File

@ -92,6 +92,14 @@ func (self *Command) ShowHelp() {
self.ShowHelpWithCommandString(strings.TrimSpace(self.CommandStringForUsage())) self.ShowHelpWithCommandString(strings.TrimSpace(self.CommandStringForUsage()))
} }
func ShowHelpInPager(text string) {
pager := exec.Command(kitty.DefaultPager[0], kitty.DefaultPager[1:]...)
pager.Stdin = strings.NewReader(text)
pager.Stdout = os.Stdout
pager.Stderr = os.Stderr
pager.Run()
}
func (self *Command) ShowHelpWithCommandString(cs string) { func (self *Command) ShowHelpWithCommandString(cs string) {
formatter := markup.New(tty.IsTerminal(os.Stdout.Fd())) formatter := markup.New(tty.IsTerminal(os.Stdout.Fd()))
screen_width := 80 screen_width := 80
@ -144,12 +152,8 @@ func (self *Command) ShowHelpWithCommandString(cs string) {
output_text := output.String() output_text := output.String()
// fmt.Printf("%#v\n", output_text) // fmt.Printf("%#v\n", output_text)
if formatter.EscapeCodesAllowed() { if formatter.EscapeCodesAllowed() {
pager := exec.Command(kitty.DefaultPager[0], kitty.DefaultPager[1:]...) ShowHelpInPager(output_text)
pager.Stdin = strings.NewReader(output_text)
pager.Stdout = os.Stdout
pager.Stderr = os.Stderr
pager.Run()
} else { } else {
os.Stdout.Write([]byte(output_text)) os.Stdout.WriteString(output_text)
} }
} }

View File

@ -96,19 +96,21 @@ func shell_loop(rl *readline.Readline, kill_if_signaled bool) (int, error) {
return 0, nil return 0, nil
} }
func print_basic_help() { func show_basic_help() {
fmt.Println("Control kitty by sending it commands.") output := strings.Builder{}
fmt.Println() fmt.Fprintln(&output, "Control kitty by sending it commands.")
fmt.Println(formatter.Title("Commands") + ":") fmt.Fprintln(&output)
fmt.Fprintln(&output, formatter.Title("Commands")+":")
r := EntryPoint(cli.NewRootCommand()) r := EntryPoint(cli.NewRootCommand())
for _, g := range r.SubCommandGroups { for _, g := range r.SubCommandGroups {
for _, sc := range g.SubCommands { for _, sc := range g.SubCommands {
fmt.Println(" ", formatter.Green(sc.Name)) fmt.Fprintln(&output, " ", formatter.Green(sc.Name))
fmt.Println(" ", sc.ShortDescription) fmt.Fprintln(&output, " ", sc.ShortDescription)
} }
} }
fmt.Println(" ", formatter.Green("exit")) fmt.Fprintln(&output, " ", formatter.Green("exit"))
fmt.Println(" ", "Exit this shell") fmt.Fprintln(&output, " ", "Exit this shell")
cli.ShowHelpInPager(output.String())
} }
func exec_command(rl *readline.Readline, cmdline string) bool { func exec_command(rl *readline.Readline, cmdline string) bool {
@ -131,7 +133,7 @@ func exec_command(rl *readline.Readline, cmdline string) bool {
hi.ExitCode = 0 hi.ExitCode = 0
defer rl.AddHistoryItem(hi) defer rl.AddHistoryItem(hi)
if len(parsed_cmdline) == 1 { if len(parsed_cmdline) == 1 {
print_basic_help() show_basic_help()
return true return true
} }
switch parsed_cmdline[1] { switch parsed_cmdline[1] {