diff options
Diffstat (limited to 'helix-term/src/ui')
-rw-r--r-- | helix-term/src/ui/editor.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 459a8c87..fc8b6470 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -126,6 +126,7 @@ impl EditorView { Self::render_text_highlights(doc, view.offset, inner, surface, theme, highlights); Self::render_gutter(editor, doc, view, view.area, surface, theme, is_focused); + Self::render_rulers(editor, doc, view, inner, surface, theme); if is_focused { Self::render_focused_view_elements(view, doc, inner, theme, surface); @@ -152,6 +153,32 @@ impl EditorView { self.render_statusline(doc, view, statusline_area, surface, theme, is_focused); } + pub fn render_rulers( + editor: &Editor, + doc: &Document, + view: &View, + viewport: Rect, + surface: &mut Surface, + theme: &Theme, + ) { + let editor_rulers = &editor.config().rulers; + let ruler_theme = theme.get("ui.virtual.ruler"); + + let rulers = doc + .language_config() + .and_then(|config| config.rulers.as_ref()) + .unwrap_or(editor_rulers); + + rulers + .iter() + // View might be horizontally scrolled, convert from absolute distance + // from the 1st column to relative distance from left of viewport + .filter_map(|ruler| ruler.checked_sub(1 + view.offset.col as u16)) + .filter(|ruler| ruler < &viewport.width) + .map(|ruler| viewport.clip_left(ruler).with_width(1)) + .for_each(|area| surface.set_style(area, ruler_theme)) + } + /// Get syntax highlights for a document in a view represented by the first line /// and column (`offset`) and the last line. This is done instead of using a view /// directly to enable rendering syntax highlighted docs anywhere (eg. picker preview) |