From 4d47287849d9aa9e0cbf5799498759fd36ce9446 Mon Sep 17 00:00:00 2001 From: chris west Date: Sat, 26 Sep 2020 12:22:32 -0700 Subject: [PATCH] ctrl+u can reload the current page --- src/ui.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 501072a..de36db5 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -161,12 +161,27 @@ impl UI { } } + /// Reload the currently focused view while preserving history. + pub fn reload(&mut self, title: &str, url: &str) -> Result<()> { + let mut rest = if self.views.len() > self.focused + 1 { + self.focused -= 1; + self.views.drain(self.focused + 1..).collect() + } else { + vec![] + }; + self.open(title, url)?; + if rest.len() > 1 { + rest.remove(0); // drop the view we're reloading + self.views.append(&mut rest); + } + Ok(()) + } + /// Open a URL - Gopher, internal, telnet, or something else. pub fn open(&mut self, title: &str, url: &str) -> Result<()> { - // no open loops if let Some(view) = self.views.get(self.focused) { if view.url() == url { - return Ok(()); + return self.reload(title, url); } } @@ -636,9 +651,7 @@ impl UI { if let Some(view) = self.views.get(self.focused) { let current_url = view.url(); if let Some(url) = self.prompt("Current URL: ", ¤t_url) { - if url != current_url { - self.open(&url, &url)?; - } + self.open(&url, &url)?; } } }