yoda: copie a la selection vers le presse-papiers, a la Ghostty
La selection n'allait que dans la selection primaire (clic du milieu) ; pour la coller avec Ctrl+V ailleurs, il fallait Ctrl+Shift+C. Reprise de copy-on-select = clipboard de Ghostty, le reglage de l'ancienne config Ghostty de Lionel. - Config copy_on_select_clipboard (desactive par defaut, comme l'amont) ; case dans Reglages > Avance. - terminal_box::on_selection_done : publie a la fin d'un geste de selection fait dans le panneau (glisser, double/triple clic, Shift+ clic), pas a chaque relachement du bouton gauche. La copie primaire existante part elle a tout relachement dans la fenetre : la recopier dans le presse-papiers ecraserait, au simple clic sur un onglet, ce qu'on vient de copier ailleurs avec une vieille selection. - Message::SelectionDone : copie la selection de cet onglet ; une selection vide (simple clic) ne donne pas de texte (range_simple). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
a035b47e98
commit
9b10e98ab1
5 changed files with 56 additions and 0 deletions
|
|
@ -123,6 +123,7 @@ pub struct TerminalBox<'a, Message> {
|
|||
dim: Option<f32>,
|
||||
mouse_inside_boundary: Option<bool>,
|
||||
on_middle_click: Option<Box<dyn Fn() -> Message + 'a>>,
|
||||
on_selection_done: Option<Box<dyn Fn() -> Message + 'a>>,
|
||||
on_open_hyperlink: Option<Box<dyn Fn(String) -> Message + 'a>>,
|
||||
on_window_focused: Option<Box<dyn Fn() -> Message + 'a>>,
|
||||
on_window_unfocused: Option<Box<dyn Fn() -> Message + 'a>>,
|
||||
|
|
@ -151,6 +152,7 @@ where
|
|||
dim: None,
|
||||
mouse_inside_boundary: None,
|
||||
on_middle_click: None,
|
||||
on_selection_done: None,
|
||||
key_binds,
|
||||
on_open_hyperlink: None,
|
||||
on_window_focused: None,
|
||||
|
|
@ -208,6 +210,14 @@ where
|
|||
self
|
||||
}
|
||||
|
||||
/// [yoda] Fin d'un geste de sélection fait dans ce panneau (glisser, double
|
||||
/// ou triple clic, Shift+clic) : le moment de copier la sélection. Un
|
||||
/// simple clic ailleurs dans la fenêtre ne le déclenche pas.
|
||||
pub fn on_selection_done(mut self, on_selection_done: impl Fn() -> Message + 'a) -> Self {
|
||||
self.on_selection_done = Some(Box::new(on_selection_done));
|
||||
self
|
||||
}
|
||||
|
||||
pub fn on_middle_click(mut self, on_middle_click: impl Fn() -> Message + 'a) -> Self {
|
||||
self.on_middle_click = Some(Box::new(on_middle_click));
|
||||
self
|
||||
|
|
@ -1581,6 +1591,9 @@ where
|
|||
}
|
||||
}
|
||||
terminal.needs_update = true;
|
||||
if let Some(on_selection_done) = &self.on_selection_done {
|
||||
shell.publish(on_selection_done());
|
||||
}
|
||||
}
|
||||
if let Some(p) = cursor_position.position_in(layout.bounds()) {
|
||||
let x = p.x - self.padding.left;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue