Skip to content

Commit 9217445

Browse files
committed
Fix special ASCII characters not being escaped when copied to clipboard
1 parent c02eb31 commit 9217445

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

objdiff-gui/src/views/diff.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,24 @@ pub fn hover_items_ui(ui: &mut Ui, items: Vec<HoverItem>, appearance: &Appearanc
860860
}
861861
}
862862

863+
/// Escape ASCII characters such as \n or \t, but not Unicode characters such as \u{3000}.
864+
/// Suitable for copying to clipboard.
865+
fn escape_special_ascii_characters(value: String) -> String {
866+
let mut escaped = String::new();
867+
escaped.push('"');
868+
for c in value.chars() {
869+
if c.is_ascii() {
870+
for e in c.escape_default() {
871+
escaped.push(e);
872+
}
873+
} else {
874+
escaped.push(c);
875+
}
876+
}
877+
escaped.push('"');
878+
escaped
879+
}
880+
863881
pub fn context_menu_items_ui(
864882
ui: &mut Ui,
865883
items: Vec<ContextItem>,
@@ -889,7 +907,8 @@ pub fn context_menu_items_ui(
889907
write_text(")", appearance.text_color, &mut job, appearance.code_font.clone());
890908
}
891909
if ui.button(job).clicked() {
892-
ui.ctx().copy_text(value);
910+
let escaped = escape_special_ascii_characters(value);
911+
ui.ctx().copy_text(escaped);
893912
ui.close();
894913
}
895914
}

0 commit comments

Comments
 (0)