aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/terminal.vala
diff options
context:
space:
mode:
authorWynn Wolf Arbor2020-03-28 15:16:31 +0100
committerWynn Wolf Arbor2020-04-13 15:45:39 +0200
commitec211bccdcfb5bfabd03f6bcff8df02bb5eab266 (patch)
tree6a160f34eb37a5ce17be1b19e0858d35b5a17e26 /terminal.vala
parent30bbf529ad3073fd449c7f9331a889b114fad1e1 (diff)
downloadweltschmerz-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.vala16
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;
}