diff options
author | Wynn Wolf Arbor | 2020-03-28 15:16:31 +0100 |
---|---|---|
committer | Wynn Wolf Arbor | 2020-04-13 15:45:39 +0200 |
commit | ec211bccdcfb5bfabd03f6bcff8df02bb5eab266 (patch) | |
tree | 6a160f34eb37a5ce17be1b19e0858d35b5a17e26 /terminal.vala | |
parent | 30bbf529ad3073fd449c7f9331a889b114fad1e1 (diff) | |
download | weltschmerz-ec211bccdcfb5bfabd03f6bcff8df02bb5eab266.tar.gz |
Add Copy to HTML feature
This commit adds a "Copy to HTML" entry to the context menu. It is
active when VTE registers an active selection. Lines copied like this
will be put into the clipboard as formatted HTML, retaining nearly all
styling information.
For this, vte_copy now takes a boolean argument - whether or not to
format the lines copied as HTML. As two menu items now access vte_copy
directly, and there is no clean way of passing arguments to signal
handlers through terminal.ui, signals for both menu items are now
connected in the Vala code instead.
Diffstat (limited to 'terminal.vala')
-rw-r--r-- | terminal.vala | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/terminal.vala b/terminal.vala index 5f4f4e0..c7a2c81 100644 --- a/terminal.vala +++ b/terminal.vala @@ -26,7 +26,8 @@ class Terminal : Gtk.Overlay { [GtkChild] Gtk.Menu standard_context_menu; [GtkChild] Gtk.Menu url_context_menu; [GtkChild] Gtk.Menu hyperlink_context_menu; - [GtkChild] Gtk.MenuItem copy_item; + [GtkChild] Gtk.MenuItem copy_item_text; + [GtkChild] Gtk.MenuItem copy_item_html; [GtkChild] Gtk.Revealer search_revealer; [GtkChild] Gtk.ScrolledWindow scrolled_window; [GtkChild] Gtk.SearchEntry search_entry; @@ -53,6 +54,9 @@ class Terminal : Gtk.Overlay { clipboard = Gtk.Clipboard.get_default(window.get_display()); + copy_item_text.activate.connect(() => vte_copy()); + copy_item_html.activate.connect(() => vte_copy(true)); + try { var regex = new Vte.Regex.for_match(URL_REGEX, URL_REGEX.length, PCRE2_CASELESS | PCRE2_MULTILINE); vte.match_add_regex(regex, 0); @@ -300,10 +304,9 @@ class Terminal : Gtk.Overlay { adjust_font_scale(vte.get_font_scale() / FONT_SCALE_FACTOR); } - [GtkCallback] - void vte_copy() { + void vte_copy(bool html = false) { if (vte.get_has_selection()) { - vte.copy_clipboard_format(TEXT); + vte.copy_clipboard_format(html ? Vte.Format.HTML : Vte.Format.TEXT); } } @@ -323,7 +326,8 @@ class Terminal : Gtk.Overlay { } else if (hyperlink_match != null) { hyperlink_context_menu.popup_at_pointer(event); } else { - copy_item.set_sensitive(vte.get_has_selection()); + copy_item_text.set_sensitive(vte.get_has_selection()); + copy_item_html.set_sensitive(vte.get_has_selection()); standard_context_menu.popup_at_pointer(event); } return true; @@ -351,7 +355,7 @@ class Terminal : Gtk.Overlay { [GtkCallback] bool vte_key_press(Gdk.EventKey event) { if (match_key(event, CONTROL_MASK | SHIFT_MASK, Gdk.Key.C)) { - vte_copy(); + vte_copy(false); return true; } |