mirror of
https://github.com/ilyakooo0/helix.git
synced 2024-12-01 11:23:10 +03:00
Sort the buffer picker by most recent access (#2980)
This commit is contained in:
parent
9c6c63a2be
commit
6a1bb81f10
@ -2473,6 +2473,7 @@ fn buffer_picker(cx: &mut Context) {
|
|||||||
path: Option<PathBuf>,
|
path: Option<PathBuf>,
|
||||||
is_modified: bool,
|
is_modified: bool,
|
||||||
is_current: bool,
|
is_current: bool,
|
||||||
|
focused_at: std::time::Instant,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ui::menu::Item for BufferMeta {
|
impl ui::menu::Item for BufferMeta {
|
||||||
@ -2505,14 +2506,21 @@ fn buffer_picker(cx: &mut Context) {
|
|||||||
path: doc.path().cloned(),
|
path: doc.path().cloned(),
|
||||||
is_modified: doc.is_modified(),
|
is_modified: doc.is_modified(),
|
||||||
is_current: doc.id() == current,
|
is_current: doc.id() == current,
|
||||||
|
focused_at: doc.focused_at,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut items = cx
|
||||||
|
.editor
|
||||||
|
.documents
|
||||||
|
.values()
|
||||||
|
.map(|doc| new_meta(doc))
|
||||||
|
.collect::<Vec<BufferMeta>>();
|
||||||
|
|
||||||
|
// mru
|
||||||
|
items.sort_unstable_by_key(|item| std::cmp::Reverse(item.focused_at));
|
||||||
|
|
||||||
let picker = FilePicker::new(
|
let picker = FilePicker::new(
|
||||||
cx.editor
|
items,
|
||||||
.documents
|
|
||||||
.values()
|
|
||||||
.map(|doc| new_meta(doc))
|
|
||||||
.collect(),
|
|
||||||
(),
|
(),
|
||||||
|cx, meta, action| {
|
|cx, meta, action| {
|
||||||
cx.editor.switch(meta.id, action);
|
cx.editor.switch(meta.id, action);
|
||||||
|
@ -169,6 +169,9 @@ pub struct Document {
|
|||||||
|
|
||||||
diff_handle: Option<DiffHandle>,
|
diff_handle: Option<DiffHandle>,
|
||||||
version_control_head: Option<Arc<ArcSwap<Box<str>>>>,
|
version_control_head: Option<Arc<ArcSwap<Box<str>>>>,
|
||||||
|
|
||||||
|
// when document was used for most-recent-used buffer picker
|
||||||
|
pub focused_at: std::time::Instant,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inlay hints for a single `(Document, View)` combo.
|
/// Inlay hints for a single `(Document, View)` combo.
|
||||||
@ -496,6 +499,7 @@ impl Document {
|
|||||||
diff_handle: None,
|
diff_handle: None,
|
||||||
config,
|
config,
|
||||||
version_control_head: None,
|
version_control_head: None,
|
||||||
|
focused_at: std::time::Instant::now(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn default(config: Arc<dyn DynAccess<Config>>) -> Self {
|
pub fn default(config: Arc<dyn DynAccess<Config>>) -> Self {
|
||||||
@ -908,6 +912,11 @@ impl Document {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Mark document as recent used for MRU sorting
|
||||||
|
pub fn mark_as_focused(&mut self) {
|
||||||
|
self.focused_at = std::time::Instant::now();
|
||||||
|
}
|
||||||
|
|
||||||
/// Remove a view's selection and inlay hints from this document.
|
/// Remove a view's selection and inlay hints from this document.
|
||||||
pub fn remove_view(&mut self, view_id: ViewId) {
|
pub fn remove_view(&mut self, view_id: ViewId) {
|
||||||
self.selections.remove(&view_id);
|
self.selections.remove(&view_id);
|
||||||
|
@ -1176,6 +1176,7 @@ impl Editor {
|
|||||||
let doc = doc_mut!(self, &doc_id);
|
let doc = doc_mut!(self, &doc_id);
|
||||||
doc.ensure_view_init(view.id);
|
doc.ensure_view_init(view.id);
|
||||||
view.sync_changes(doc);
|
view.sync_changes(doc);
|
||||||
|
doc.mark_as_focused();
|
||||||
|
|
||||||
align_view(doc, view, Align::Center);
|
align_view(doc, view, Align::Center);
|
||||||
}
|
}
|
||||||
@ -1246,6 +1247,7 @@ impl Editor {
|
|||||||
let view_id = view!(self).id;
|
let view_id = view!(self).id;
|
||||||
let doc = doc_mut!(self, &id);
|
let doc = doc_mut!(self, &id);
|
||||||
doc.ensure_view_init(view_id);
|
doc.ensure_view_init(view_id);
|
||||||
|
doc.mark_as_focused();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Action::HorizontalSplit | Action::VerticalSplit => {
|
Action::HorizontalSplit | Action::VerticalSplit => {
|
||||||
@ -1267,6 +1269,7 @@ impl Editor {
|
|||||||
// initialize selection for view
|
// initialize selection for view
|
||||||
let doc = doc_mut!(self, &id);
|
let doc = doc_mut!(self, &id);
|
||||||
doc.ensure_view_init(view_id);
|
doc.ensure_view_init(view_id);
|
||||||
|
doc.mark_as_focused();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1417,6 +1420,7 @@ impl Editor {
|
|||||||
let view_id = self.tree.insert(view);
|
let view_id = self.tree.insert(view);
|
||||||
let doc = doc_mut!(self, &doc_id);
|
let doc = doc_mut!(self, &doc_id);
|
||||||
doc.ensure_view_init(view_id);
|
doc.ensure_view_init(view_id);
|
||||||
|
doc.mark_as_focused();
|
||||||
}
|
}
|
||||||
|
|
||||||
self._refresh();
|
self._refresh();
|
||||||
@ -1471,6 +1475,10 @@ impl Editor {
|
|||||||
view.sync_changes(doc);
|
view.sync_changes(doc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let view = view!(self, view_id);
|
||||||
|
let doc = doc_mut!(self, &view.doc);
|
||||||
|
doc.mark_as_focused();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn focus_next(&mut self) {
|
pub fn focus_next(&mut self) {
|
||||||
|
Loading…
Reference in New Issue
Block a user