diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 5a0d639..8e0cff8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,7 @@ use term::Key; enum Mode { Insert, Paste, + MultilinePaste, Normal, } @@ -217,6 +218,18 @@ impl StateHistory { return; }; self.cursor_col = col; + let _ = self.repaint_line_full(); + let _ = stdout().flush(); + } + (Mode::MultilinePaste, Mode::MultilinePaste) => (), + (Mode::MultilinePaste, Mode::Paste) => { + return; + } + (Mode::MultilinePaste, _) => { + let Ok((_, col)) = term::cursor_pos(&mut self.stdin) else { + return; + }; + self.cursor_col = col; let _ = self.repaint_all(); let _ = self.repaint_line_full(); let _ = stdout().flush(); @@ -256,7 +269,7 @@ fn edit(file: &OsStr) -> Result<(), Box<dyn Error>> { let c = term::read_key(&mut state.stdin)?; match c { Key::Timeout => { - if state.mode != Mode::Paste { + if state.mode != Mode::Paste && state.mode != Mode::MultilinePaste { continue; } state.set_mode(Mode::Insert); @@ -344,7 +357,7 @@ fn edit(file: &OsStr) -> Result<(), Box<dyn Error>> { let _ = stdout().flush(); } Key::Char(b'\r') => { - state.set_mode(Mode::Paste); + state.set_mode(Mode::MultilinePaste); state.buf = state.buf.insert( state .buf |
