From aa1d4dbd63d31415792ea8706084fdbceb3b0328 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 13 Nov 2023 15:00:52 -0700 Subject: [PATCH] When opening new tab, check for already open tab --- src/main.rs | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index ed492c6..4ab0eae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -264,10 +264,41 @@ impl App { } pub fn open_tab(&mut self, path_opt: Option) { - let mut tab = Tab::new(&self.config); - if let Some(path) = path_opt { - tab.open(path); - } + let tab = match path_opt { + Some(path) => { + let canonical = match fs::canonicalize(&path) { + Ok(ok) => ok, + Err(err) => { + log::error!("failed to canonicalize {:?}: {}", path, err); + return; + } + }; + + //TODO: allow files to be open multiple times + let mut activate_opt = None; + for entity in self.tab_model.iter() { + match self.tab_model.data::(entity) { + Some(tab) => { + if tab.path_opt.as_ref() == Some(&canonical) { + activate_opt = Some(entity); + break; + } + } + None => {} + } + } + if let Some(entity) = activate_opt { + self.tab_model.activate(entity); + return; + } + + let mut tab = Tab::new(&self.config); + tab.open(canonical); + tab + } + None => Tab::new(&self.config), + }; + self.tab_model .insert() .text(tab.title())