summary refs log tree commit diff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs
index ea151c8..7f84646 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -185,10 +185,13 @@ impl Ivy {
 
         'j' => {
           self.handle_movement(async |ivy: &mut Ivy| {
+            let buffer = ivy.buffer.read().await;
             let window = ivy.window.write().await;
 
             let mut row = window.cursor_row.write().await;
-            *row += 1;
+            if *row + 1 < buffer.lines.read().await.len() {
+              *row += 1;
+            };
 
             Ok(())
           }).await?;
@@ -209,10 +212,18 @@ impl Ivy {
 
         'l' => {
           self.handle_movement(async |ivy: &mut Ivy| {
+            let buffer = ivy.buffer.read().await;
             let window = ivy.window.write().await;
 
-            let mut column = window.cursor_column.write().await;
-            *column += 1;
+            let row = *window.cursor_row.read().await;
+            if let Some(span) = buffer.line_span(row).await {
+              let width = span.end - span.start;
+
+              let mut column = window.cursor_column.write().await;
+              if *column + 1 < width {
+                *column += 1;
+              }
+            }
 
             Ok(())
           }).await?;