Add simple support for wrapscan (#13497)

For: #13417 

This is a simple version, I'm not sure if we just need to limit this
feature to vim mode, or maybe in normal editor mode, which involves
other logic like the location of the setting

Release Notes:

- N/A

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This commit is contained in:
Hans
2024-07-10 20:42:37 -06:00
committed by GitHub
co-authored by Conrad Irwin
parent 46645b552f
commit 3b823d4a0b
8 changed files with 137 additions and 19 deletions
+16 -3
View File
@@ -7,7 +7,7 @@ use gpui::{
};
use language::DiagnosticSeverity;
use std::{any::TypeId, ops::DerefMut};
use std::{any::TypeId, ops::DerefMut, time::Duration};
use ui::{prelude::*, Tooltip};
use util::ResultExt;
@@ -174,7 +174,7 @@ impl Workspace {
pub fn show_toast(&mut self, toast: Toast, cx: &mut ViewContext<Self>) {
self.dismiss_notification(&toast.id, cx);
self.show_notification(toast.id, cx, |cx| {
self.show_notification(toast.id.clone(), cx, |cx| {
cx.new_view(|_cx| match toast.on_click.as_ref() {
Some((click_msg, on_click)) => {
let on_click = on_click.clone();
@@ -184,7 +184,20 @@ impl Workspace {
}
None => simple_message_notification::MessageNotification::new(toast.msg.clone()),
})
})
});
if toast.autohide {
cx.spawn(|workspace, mut cx| async move {
cx.background_executor()
.timer(Duration::from_millis(5000))
.await;
workspace
.update(&mut cx, |workspace, cx| {
workspace.dismiss_toast(&toast.id, cx)
})
.ok();
})
.detach();
}
}
pub fn dismiss_toast(&mut self, id: &NotificationId, cx: &mut ViewContext<Self>) {
+8 -10
View File
@@ -218,9 +218,11 @@ impl_actions!(
]
);
#[derive(Clone)]
pub struct Toast {
id: NotificationId,
msg: Cow<'static, str>,
autohide: bool,
on_click: Option<(Cow<'static, str>, Arc<dyn Fn(&mut WindowContext)>)>,
}
@@ -230,6 +232,7 @@ impl Toast {
id,
msg: msg.into(),
on_click: None,
autohide: false,
}
}
@@ -241,6 +244,11 @@ impl Toast {
self.on_click = Some((message.into(), Arc::new(on_click)));
self
}
pub fn autohide(mut self) -> Self {
self.autohide = true;
self
}
}
impl PartialEq for Toast {
@@ -251,16 +259,6 @@ impl PartialEq for Toast {
}
}
impl Clone for Toast {
fn clone(&self) -> Self {
Toast {
id: self.id.clone(),
msg: self.msg.clone(),
on_click: self.on_click.clone(),
}
}
}
#[derive(Debug, Default, Clone, Deserialize, PartialEq)]
pub struct OpenTerminal {
pub working_directory: PathBuf,