aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/typable-cmd.md1
-rw-r--r--helix-term/src/commands/typed.rs29
-rw-r--r--helix-term/src/compositor.rs4
3 files changed, 34 insertions, 0 deletions
diff --git a/book/src/generated/typable-cmd.md b/book/src/generated/typable-cmd.md
index 66e6ac03..269d63e3 100644
--- a/book/src/generated/typable-cmd.md
+++ b/book/src/generated/typable-cmd.md
@@ -73,3 +73,4 @@
| `:pipe` | Pipe each selection to the shell command. |
| `:pipe-to` | Pipe each selection to the shell command, ignoring output. |
| `:run-shell-command`, `:sh` | Run a shell command |
+| `:redraw` | Clear and re-render the whole UI |
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index cb387fcb..90dde7e1 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -1808,6 +1808,28 @@ fn run_shell_command(
Ok(())
}
+fn redraw(
+ cx: &mut compositor::Context,
+ _args: &[Cow<str>],
+ event: PromptEvent,
+) -> anyhow::Result<()> {
+ if event != PromptEvent::Validate {
+ return Ok(());
+ }
+
+ let callback = Box::pin(async move {
+ let call: job::Callback = Box::new(|_editor, compositor| {
+ compositor.clear().expect("unable to redraw");
+ });
+
+ Ok(call)
+ });
+
+ cx.jobs.callback(callback);
+
+ Ok(())
+}
+
pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
TypableCommand {
name: "quit",
@@ -2323,6 +2345,13 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
fun: run_shell_command,
completer: Some(completers::directory),
},
+ TypableCommand {
+ name: "redraw",
+ aliases: &[],
+ doc: "Clear and re-render the whole UI",
+ fun: redraw,
+ completer: None,
+ },
];
pub static TYPABLE_COMMAND_MAP: Lazy<HashMap<&'static str, &'static TypableCommand>> =
diff --git a/helix-term/src/compositor.rs b/helix-term/src/compositor.rs
index 9dad3620..18620b7b 100644
--- a/helix-term/src/compositor.rs
+++ b/helix-term/src/compositor.rs
@@ -197,6 +197,10 @@ impl Compositor {
.find(|component| component.id() == Some(id))
.and_then(|component| component.as_any_mut().downcast_mut())
}
+
+ pub fn clear(&mut self) -> std::io::Result<()> {
+ self.terminal.clear()
+ }
}
// View casting, taken straight from Cursive