From 6ba082697d4a930d4114e950a212f115bace47e9 Mon Sep 17 00:00:00 2001 From: Jan Hrastnik Date: Wed, 24 Jun 2020 20:59:35 +0200 Subject: [PATCH] added cursor rendering --- helix-core/src/lib.rs | 2 +- helix-core/src/state.rs | 4 ++-- helix-term/src/editor.rs | 15 ++++++++++++--- helix-term/src/keymap.rs | 7 ++++++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs index 74900c01f..f9e987a6e 100644 --- a/helix-core/src/lib.rs +++ b/helix-core/src/lib.rs @@ -3,7 +3,7 @@ mod buffer; pub mod commands; mod graphemes; mod selection; -mod state; +pub mod state; mod transaction; pub use ropey::{Rope, RopeSlice}; diff --git a/helix-core/src/state.rs b/helix-core/src/state.rs index 429a4dd4d..2458f9b1c 100644 --- a/helix-core/src/state.rs +++ b/helix-core/src/state.rs @@ -3,8 +3,8 @@ use crate::{Buffer, Rope, RopeSlice, Selection, SelectionRange}; /// A state represents the current editor state of a single buffer. pub struct State { - pub(crate) doc: Buffer, - pub(crate) selection: Selection, + pub doc: Buffer, + pub selection: Selection, } #[derive(Copy, Clone, PartialEq, Eq)] diff --git a/helix-term/src/editor.rs b/helix-term/src/editor.rs index 650243749..7b3e215aa 100644 --- a/helix-term/src/editor.rs +++ b/helix-term/src/editor.rs @@ -14,7 +14,7 @@ use std::time::Duration; use anyhow::Error; use crate::{keymap, Args}; -use helix_core::{Buffer, State}; +use helix_core::{state::coords_at_pos, Buffer, State}; pub struct BufferComponent<'a> { x: u16, @@ -37,8 +37,7 @@ impl BufferComponent<'_> { SetForegroundColor(Color::Reset), cursor::MoveTo(self.x + 2, self.y + line_count), Print(line) - ) - .unwrap(); + ); line_count += 1; } } @@ -117,6 +116,16 @@ impl Editor { // TODO: handle count other than 1 command(state, 1); self.render(); + // render the cursor + let pos = self.state.as_ref().unwrap().selection.primary().head; + let coords = coords_at_pos( + &self.state.as_ref().unwrap().doc.contents.slice(..), + pos, + ); + execute!( + stdout(), + cursor::MoveTo((coords.1 + 2) as u16, coords.0 as u16) + ); } } } diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs index 25bffd2ee..44f4fc958 100644 --- a/helix-term/src/keymap.rs +++ b/helix-term/src/keymap.rs @@ -1,6 +1,11 @@ -use crossterm::event::{KeyCode, KeyEvent as Key, KeyModifiers as Modifiers}; +use crossterm::{ + event::{KeyCode, KeyEvent as Key, KeyModifiers as Modifiers}, + execute, + style::Print, +}; use helix_core::commands::{self, Command}; use std::collections::HashMap; +use std::io::{stdout, Write}; // Kakoune-inspired: // mode = {