vim: Disregard non-text content on system clipboard for yanking (#39118)

Closes #39086

Release Notes:

- Fixed the vim problem that image clipboard content overrides the
unnamed register and produces an empty paste.
This commit is contained in:
Miao 2025-09-30 03:25:45 +08:00 committed by GitHub
parent 6e5ff6d091
commit 90ea252c82
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -807,11 +807,10 @@ impl VimGlobals {
self.last_yank.replace(content.text.clone());
cx.write_to_clipboard(content.clone().into());
} else {
self.last_yank = cx
.read_from_clipboard()
.and_then(|item| item.text().map(|string| string.into()));
if let Some(text) = cx.read_from_clipboard().and_then(|i| i.text()) {
self.last_yank.replace(text.into());
}
}
self.registers.insert('"', content.clone());
if is_yank {
self.registers.insert('0', content);
@ -885,10 +884,10 @@ impl VimGlobals {
fn system_clipboard_is_newer(&self, cx: &App) -> bool {
cx.read_from_clipboard().is_some_and(|item| {
if let Some(last_state) = &self.last_yank {
Some(last_state.as_ref()) != item.text().as_deref()
} else {
true
match (item.text().as_deref(), &self.last_yank) {
(Some(new), Some(last)) => last.as_ref() != new,
(Some(_), None) => true,
(None, _) => false,
}
})
}