diff --git a/tools/tui/loop/api.go b/tools/tui/loop/api.go index 13a733c76..87af9628d 100644 --- a/tools/tui/loop/api.go +++ b/tools/tui/loop/api.go @@ -252,6 +252,10 @@ func (self *Loop) AllowLineWrapping(allow bool) { } } +func (self *Loop) ClearScreen() { + self.QueueWriteString("\x1b[H\x1b[2J") +} + func (self *Loop) Quit(exit_code int) { self.exit_code = exit_code self.keep_going = false diff --git a/tools/tui/readline/actions.go b/tools/tui/readline/actions.go index 51eee629c..7de119666 100644 --- a/tools/tui/readline/actions.go +++ b/tools/tui/readline/actions.go @@ -429,7 +429,12 @@ func (self *Readline) perform_action(ac Action, repeat_count uint) error { } } return self.perform_action(ActionCursorDown, repeat_count) - + case ActionClearScreen: + self.loop.StartAtomicUpdate() + self.loop.ClearScreen() + self.RedrawNonAtomic() + self.loop.EndAtomicUpdate() + return nil } return ErrCouldNotPerformAction } diff --git a/tools/tui/readline/api.go b/tools/tui/readline/api.go index 1e59bc0f2..9419ba715 100644 --- a/tools/tui/readline/api.go +++ b/tools/tui/readline/api.go @@ -55,6 +55,7 @@ const ( ActionHistoryNextOrCursorDown ActionHistoryNext ActionHistoryPrevious + ActionClearScreen ) type Readline struct { diff --git a/tools/tui/readline/keys.go b/tools/tui/readline/keys.go index 33c9f5b91..923c685b2 100644 --- a/tools/tui/readline/keys.go +++ b/tools/tui/readline/keys.go @@ -35,6 +35,8 @@ var default_shortcuts = map[string]Action{ "right": ActionCursorRight, "ctrl+f": ActionCursorRight, + "ctrl+l": ActionClearScreen, + "ctrl+d": ActionEndInput, "enter": ActionAcceptInput, }