From 1661e4b5e1d8ebfef28f798fcb86ba2656373ba0 Mon Sep 17 00:00:00 2001 From: Dimitar Gyurov Date: Fri, 10 Mar 2023 23:42:42 +0100 Subject: Add a version-control statusline element (#5682) --- helix-view/src/document.rs | 16 ++++++++++++++++ helix-view/src/editor.rs | 4 ++++ 2 files changed, 20 insertions(+) (limited to 'helix-view') diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index db12fb92..b2a9ddec 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -1,5 +1,6 @@ use anyhow::{anyhow, bail, Context, Error}; use arc_swap::access::DynAccess; +use arc_swap::ArcSwap; use futures_util::future::BoxFuture; use futures_util::FutureExt; use helix_core::auto_pairs::AutoPairs; @@ -158,6 +159,7 @@ pub struct Document { language_server: Option>, diff_handle: Option, + version_control_head: Option>>>, } use std::{fmt, mem}; @@ -404,6 +406,7 @@ impl Document { language_server: None, diff_handle: None, config, + version_control_head: None, } } pub fn default(config: Arc>) -> Self { @@ -707,6 +710,8 @@ impl Document { None => self.diff_handle = None, } + self.version_control_head = provider_registry.get_current_head_name(&path); + Ok(()) } @@ -1158,6 +1163,17 @@ impl Document { } } + pub fn version_control_head(&self) -> Option>> { + self.version_control_head.as_ref().map(|a| a.load_full()) + } + + pub fn set_version_control_head( + &mut self, + version_control_head: Option>>>, + ) { + self.version_control_head = version_control_head; + } + #[inline] /// Tree-sitter AST tree pub fn syntax(&self) -> Option<&Syntax> { diff --git a/helix-view/src/editor.rs b/helix-view/src/editor.rs index 1b4664ff..41aa707f 100644 --- a/helix-view/src/editor.rs +++ b/helix-view/src/editor.rs @@ -467,6 +467,9 @@ pub enum StatusLineElement { /// A single space Spacer, + + /// Current version control information + VersionControl, } // Cursor shape is read and used on every rendered frame and so needs @@ -1297,6 +1300,7 @@ impl Editor { if let Some(diff_base) = self.diff_providers.get_diff_base(&path) { doc.set_diff_base(diff_base, self.redraw_handle.clone()); } + doc.set_version_control_head(self.diff_providers.get_current_head_name(&path)); let id = self.new_document(doc); let _ = self.launch_language_server(id); -- cgit v1.2.3-70-g09d2