From 0604e19495e0e50aafb255480fb4af980d267eb7 Mon Sep 17 00:00:00 2001 From: Taehoon Moon Date: Tue, 19 Nov 2024 23:53:41 +0900 Subject: [PATCH] Fix yank sharing across tabs (#58) --- tui/src/context/notebook.rs | 13 ++++++++++--- tui/src/transitions.rs | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/tui/src/context/notebook.rs b/tui/src/context/notebook.rs index bde7b84..1ee13db 100644 --- a/tui/src/context/notebook.rs +++ b/tui/src/context/notebook.rs @@ -220,12 +220,19 @@ impl NotebookContext { self.tab_index = Some(self.tabs.len() - 1); } - let yank = self.yank.clone(); - if let Some(yank) = yank { + self.apply_yank(); + } + + pub fn apply_yank(&mut self) { + if let Some(yank) = self.yank.clone() { self.get_editor_mut().set_yank_text(yank); } } + pub fn update_yank(&mut self) { + self.yank = Some(self.get_editor().yank_text()); + } + pub fn consume(&mut self, input: &Input) -> Action { let code = match input { Input::Key(key) => key.code, @@ -334,7 +341,7 @@ impl NotebookContext { .into(), KeyCode::Char('n') if idle => { self.show_browser = true; - self.yank = Some(self.get_editor_mut().yank_text()); + self.update_yank(); TuiAction::SaveAndPassThrough.into() } diff --git a/tui/src/transitions.rs b/tui/src/transitions.rs index 058b370..b155b0a 100644 --- a/tui/src/transitions.rs +++ b/tui/src/transitions.rs @@ -190,6 +190,7 @@ impl App { self.context.notebook.update_items(root); self.context.notebook.select_item(¬e_id); + self.context.notebook.apply_yank(); } CloseTab(note_id) => { self.context.notebook.close_tab(¬e_id); @@ -200,6 +201,7 @@ impl App { let note_id = &state.get_selected_note().log_unwrap().id; self.context.notebook.update_items(&state.root); self.context.notebook.select_item(note_id); + self.context.notebook.apply_yank(); } ToggleLineNumbers => { self.context.notebook.show_line_number = !self.context.notebook.show_line_number; @@ -319,6 +321,7 @@ impl App { editor.move_cursor(cursor_move); editor.cut(); self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } Paste => { let line_yanked = self.context.notebook.line_yanked; @@ -354,6 +357,7 @@ impl App { editor.cancel_selection(); editor.move_cursor(CursorMove::Jump(cursor.0 as u16, cursor.1 as u16)); self.context.notebook.line_yanked = true; + self.context.notebook.update_yank(); } DeleteLines(n) => { let editor = self.context.notebook.get_editor_mut(); @@ -378,6 +382,7 @@ impl App { move_cursor_to_line_non_empty_start(editor); self.context.notebook.line_yanked = true; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteLinesAndInsert(n) => { let editor = self.context.notebook.get_editor_mut(); @@ -389,6 +394,7 @@ impl App { editor.cut(); self.context.notebook.line_yanked = true; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteInsideWord(n) => { let editor = self.context.notebook.get_editor_mut(); @@ -409,6 +415,7 @@ impl App { self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteWordEnd(n) => { let editor = self.context.notebook.get_editor_mut(); @@ -419,6 +426,7 @@ impl App { self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteWordBack(n) => { let editor = self.context.notebook.get_editor_mut(); @@ -428,6 +436,7 @@ impl App { self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteLineStart => { let editor = self.context.notebook.get_editor_mut(); @@ -437,6 +446,7 @@ impl App { self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteLineEnd(n) => { let editor = self.context.notebook.get_editor_mut(); @@ -448,6 +458,7 @@ impl App { self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } }; } @@ -547,6 +558,7 @@ impl App { reselect_for_yank(editor); editor.copy(); self.context.notebook.line_yanked = false; + self.context.notebook.update_yank(); } DeleteSelection => { let editor = self.context.notebook.get_editor_mut(); @@ -554,6 +566,7 @@ impl App { editor.cut(); self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } DeleteSelectionAndInsertMode => { let editor = self.context.notebook.get_editor_mut(); @@ -561,6 +574,7 @@ impl App { editor.cut(); self.context.notebook.line_yanked = false; self.context.notebook.mark_dirty(); + self.context.notebook.update_yank(); } } }