aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hrastnik2020-06-24 18:59:35 +0000
committerJan Hrastnik2020-06-24 18:59:35 +0000
commit6ba082697d4a930d4114e950a212f115bace47e9 (patch)
tree278c403c63a34899f8a175bf55deb035b0833c80
parentc3a23a1c0933900d795a1a5b67c3a305616ba8f2 (diff)
added cursor rendering
-rw-r--r--helix-core/src/lib.rs2
-rw-r--r--helix-core/src/state.rs4
-rw-r--r--helix-term/src/editor.rs15
-rw-r--r--helix-term/src/keymap.rs7
4 files changed, 21 insertions, 7 deletions
diff --git a/helix-core/src/lib.rs b/helix-core/src/lib.rs
index 74900c01..f9e987a6 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 429a4dd4..2458f9b1 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 65024374..7b3e215a 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 25bffd2e..44f4fc95 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 = {