浏览代码

修复buffer在最后个字符cursor右移时崩溃的问题 (#27)

GnoCiYeH 7 月之前
父节点
当前提交
b27eac6f2f
共有 2 个文件被更改,包括 12 次插入4 次删除
  1. 6 1
      src/buffer/cursor.rs
  2. 6 3
      src/view/terminal/cross_terminal.rs

+ 6 - 1
src/buffer/cursor.rs

@@ -138,9 +138,14 @@ impl Cursor {
             .to_string()
             .lines()
             .nth(self.line)
-            .unwrap()
+            .unwrap_or_default()
             .graphemes(true)
             .count();
+
+        if max_offset == 0 {
+            return;
+        }
+
         if self.offset + 1 > max_offset
             && self.line + 1 <= self.data.borrow().to_string().lines().count()
         {

+ 6 - 3
src/view/terminal/cross_terminal.rs

@@ -23,9 +23,12 @@ unsafe impl Sync for CrossTerminal {}
 impl CrossTerminal {
     pub fn new() -> Result<CrossTerminal> {
         crossterm::terminal::enable_raw_mode()?;
-        Ok(CrossTerminal {
+        let terminal = CrossTerminal {
             ansi_buffer: RefCell::default(),
-        })
+        };
+        terminal.clear()?;
+        terminal.present()?;
+        Ok(terminal)
     }
 
     fn buffer(&self) -> RefMut<Vec<u8>> {
@@ -177,7 +180,7 @@ impl Terminal for CrossTerminal {
 
 impl Drop for CrossTerminal {
     fn drop(&mut self) {
-        self.suspend();
+        // self.suspend();
         let _ = disable_raw_mode();
     }
 }