Add --show-explorer and file refresh to file explorer

feature/file-explorer-2
trivernis 8 months ago
parent 9120f04fdb
commit 9538891242
Signed by: Trivernis
GPG Key ID: 7E6D18B61C8D2F4B

@ -25,11 +25,11 @@ use tui::backend::Backend;
use crate::{
args::Args,
commands::apply_workspace_edit,
compositor::{Compositor, Event},
compositor::{self, Compositor, Event},
config::Config,
job::Jobs,
keymap::Keymaps,
ui::{self, overlay::overlaid},
ui::{self, overlay::overlaid, Explorer},
};
use log::{debug, error, warn};
@ -153,7 +153,21 @@ impl Application {
let keys = Box::new(Map::new(Arc::clone(&config), |config: &Config| {
&config.keys
}));
let editor_view = Box::new(ui::EditorView::new(Keymaps::new(keys)));
let mut editor_view = Box::new(ui::EditorView::new(Keymaps::new(keys)));
let mut jobs = Jobs::new();
if args.show_explorer {
let mut context = compositor::Context {
editor: &mut editor,
scroll: None,
jobs: &mut jobs,
};
let mut explorer = Explorer::new(&mut context)?;
explorer.unfocus();
editor_view.explorer = Some(explorer);
}
compositor.push(editor_view);
if args.load_tutor {
@ -243,7 +257,7 @@ impl Application {
syn_loader,
signals,
jobs: Jobs::new(),
jobs,
lsp_progress: LspProgressMap::new(),
};

@ -17,6 +17,7 @@ pub struct Args {
pub log_file: Option<PathBuf>,
pub config_file: Option<PathBuf>,
pub files: Vec<(PathBuf, Position)>,
pub show_explorer: bool,
}
impl Args {
@ -32,6 +33,7 @@ impl Args {
"--version" => args.display_version = true,
"--help" => args.display_help = true,
"--tutor" => args.load_tutor = true,
"--show-explorer" => args.show_explorer = true,
"--vsplit" => match args.split {
Some(_) => anyhow::bail!("can only set a split once of a specific type"),
None => args.split = Some(Layout::Vertical),

@ -1533,12 +1533,32 @@ impl Component for EditorView {
if let Some(explore) = self.explorer.as_mut() {
if explore.is_focus() {
let area = if use_bufferline {
area.clip_top(1)
} else {
area
let needs_update = explore.is_focus() || {
if let Some(current_document_path) = doc!(cx.editor).path().cloned() {
if let Some(current_explore_path) = explore.current_file() {
if *current_explore_path != current_document_path {
let _ = explore.reveal_file(current_document_path);
true
} else {
false
}
} else {
let _ = explore.reveal_file(current_document_path);
true
}
} else {
false
}
};
explore.render(area, surface, cx);
if needs_update {
let area = if use_bufferline {
area.clip_top(1)
} else {
area
};
explore.render(area, surface, cx);
}
}
}
}

@ -266,7 +266,7 @@ impl Explorer {
self.state.open = true;
}
fn unfocus(&mut self) {
pub fn unfocus(&mut self) {
self.state.focus = false;
}
@ -605,6 +605,11 @@ impl Explorer {
}
}
/// Returns the current file in the tree view
pub fn current_file(&self) -> Option<&PathBuf> {
self.tree.current_item().ok().map(|c| &c.path)
}
pub fn is_opened(&self) -> bool {
self.state.open
}

Loading…
Cancel
Save