refactor: remove AttachImage tui event (#3191)

TuiEvent is supposed to be purely events that come from the "driver",
i.e. events from the terminal. Everything app-specific should be an
AppEvent. In this case, it didn't need to be an event at all.
This commit is contained in:
Jeremy Rose
2025-09-05 07:02:11 -07:00
committed by GitHub
parent 3f40fbc0a8
commit 323a5cb7e7
3 changed files with 12 additions and 43 deletions

View File

@@ -183,15 +183,6 @@ impl App {
}, },
)?; )?;
} }
TuiEvent::AttachImage {
path,
width,
height,
format_label,
} => {
self.chat_widget
.attach_image(path, width, height, format_label);
}
} }
} }
Ok(true) Ok(true)

View File

@@ -57,6 +57,7 @@ use crate::bottom_pane::CancellationEvent;
use crate::bottom_pane::InputResult; use crate::bottom_pane::InputResult;
use crate::bottom_pane::SelectionAction; use crate::bottom_pane::SelectionAction;
use crate::bottom_pane::SelectionItem; use crate::bottom_pane::SelectionItem;
use crate::clipboard_paste::paste_image_to_temp_png;
use crate::get_git_diff::get_git_diff; use crate::get_git_diff::get_git_diff;
use crate::history_cell; use crate::history_cell;
use crate::history_cell::CommandOutput; use crate::history_cell::CommandOutput;
@@ -745,6 +746,17 @@ impl ChatWidget {
self.on_ctrl_c(); self.on_ctrl_c();
return; return;
} }
KeyEvent {
code: KeyCode::Char('v'),
modifiers: KeyModifiers::CONTROL,
kind: KeyEventKind::Press,
..
} => {
if let Ok((path, info)) = paste_image_to_temp_png() {
self.attach_image(path, info.width, info.height, info.encoded_format.label());
}
return;
}
other if other.kind == KeyEventKind::Press => { other if other.kind == KeyEventKind::Press => {
self.bottom_pane.clear_ctrl_c_quit_hint(); self.bottom_pane.clear_ctrl_c_quit_hint();
} }

View File

@@ -1,7 +1,6 @@
use std::io::Result; use std::io::Result;
use std::io::Stdout; use std::io::Stdout;
use std::io::stdout; use std::io::stdout;
use std::path::PathBuf;
use std::pin::Pin; use std::pin::Pin;
use std::sync::Arc; use std::sync::Arc;
use std::sync::atomic::AtomicBool; use std::sync::atomic::AtomicBool;
@@ -20,10 +19,7 @@ use crossterm::cursor::MoveTo;
use crossterm::event::DisableBracketedPaste; use crossterm::event::DisableBracketedPaste;
use crossterm::event::EnableBracketedPaste; use crossterm::event::EnableBracketedPaste;
use crossterm::event::Event; use crossterm::event::Event;
use crossterm::event::KeyCode;
use crossterm::event::KeyEvent; use crossterm::event::KeyEvent;
use crossterm::event::KeyEventKind;
use crossterm::event::KeyModifiers;
use crossterm::event::KeyboardEnhancementFlags; use crossterm::event::KeyboardEnhancementFlags;
use crossterm::event::PopKeyboardEnhancementFlags; use crossterm::event::PopKeyboardEnhancementFlags;
use crossterm::event::PushKeyboardEnhancementFlags; use crossterm::event::PushKeyboardEnhancementFlags;
@@ -38,7 +34,6 @@ use ratatui::crossterm::terminal::enable_raw_mode;
use ratatui::layout::Offset; use ratatui::layout::Offset;
use ratatui::text::Line; use ratatui::text::Line;
use crate::clipboard_paste::paste_image_to_temp_png;
use crate::custom_terminal; use crate::custom_terminal;
use crate::custom_terminal::Terminal as CustomTerminal; use crate::custom_terminal::Terminal as CustomTerminal;
use tokio::select; use tokio::select;
@@ -154,12 +149,6 @@ pub enum TuiEvent {
Key(KeyEvent), Key(KeyEvent),
Paste(String), Paste(String),
Draw, Draw,
AttachImage {
path: PathBuf,
width: u32,
height: u32,
format_label: &'static str,
},
} }
pub struct Tui { pub struct Tui {
@@ -305,29 +294,6 @@ impl Tui {
select! { select! {
Some(Ok(event)) = crossterm_events.next() => { Some(Ok(event)) = crossterm_events.next() => {
match event { match event {
// Detect Ctrl+V to attach an image from the clipboard.
Event::Key(key_event @ KeyEvent {
code: KeyCode::Char('v'),
modifiers: KeyModifiers::CONTROL,
kind: KeyEventKind::Press,
..
}) => {
match paste_image_to_temp_png() {
Ok((path, info)) => {
yield TuiEvent::AttachImage {
path,
width: info.width,
height: info.height,
format_label: info.encoded_format.label(),
};
}
Err(_) => {
// Fall back to normal key handling if no image is available.
yield TuiEvent::Key(key_event);
}
}
}
crossterm::event::Event::Key(key_event) => { crossterm::event::Event::Key(key_event) => {
#[cfg(unix)] #[cfg(unix)]
if matches!( if matches!(