summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Murphy <hello@jamiethalacker.dev>2022-07-03 21:48:03 +0200
committerChristian Persch <chpe@src.gnome.org>2022-07-03 21:48:03 +0200
commit3ed53bfaa7344ce5b7727a60a2d33315b15201e5 (patch)
tree5884f2bbf2cd0b4472857d1057bc15e42428731c
parent0372107ad01e84912ac6c4806f4b6b1c47d8634b (diff)
downloadvte-3ed53bfaa7344ce5b7727a60a2d33315b15201e5.tar.gz
widget: Add API to get selected text
Fixes: https://gitlab.gnome.org/GNOME/vte/-/issues/2563
-rw-r--r--src/vte/vteterminal.h3
-rw-r--r--src/vtegtk.cc32
2 files changed, 35 insertions, 0 deletions
diff --git a/src/vte/vteterminal.h b/src/vte/vteterminal.h
index 0d3cf51c..6f8a7751 100644
--- a/src/vte/vteterminal.h
+++ b/src/vte/vteterminal.h
@@ -358,6 +358,9 @@ gboolean vte_terminal_get_allow_hyperlink(VteTerminal *terminal) _VTE_CXX_NOEXCE
_VTE_PUBLIC
gboolean vte_terminal_get_has_selection(VteTerminal *terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1);
+_VTE_PUBLIC
+char* vte_terminal_get_text_selected(VteTerminal* terminal) _VTE_CXX_NOEXCEPT _VTE_GNUC_NONNULL(1);
+
/* Set what happens when the user strikes backspace or delete. */
_VTE_PUBLIC
void vte_terminal_set_backspace_binding(VteTerminal *terminal,
diff --git a/src/vtegtk.cc b/src/vtegtk.cc
index dba6ed76..034c023b 100644
--- a/src/vtegtk.cc
+++ b/src/vtegtk.cc
@@ -5577,6 +5577,38 @@ catch (...)
}
/**
+ * vte_terminal_get_text_selected:
+ * @terminal: a #VteTerminal
+ *
+ * Gets the currently selected text.
+ *
+ * Returns: (transfer full) (nullable): a newly allocated string containing the selected text, or %NULL if there is no selection
+ *
+ * Since: 0.70
+ */
+char*
+vte_terminal_get_text_selected(VteTerminal* terminal) noexcept
+try
+{
+ g_return_val_if_fail(VTE_IS_TERMINAL(terminal), nullptr);
+
+ auto const selection = IMPL(terminal)->m_selection_resolved;
+ return vte_terminal_get_text_range(terminal,
+ selection.start_row(),
+ selection.start_column(),
+ selection.last_row(),
+ selection.end_column(),
+ nullptr,
+ nullptr,
+ nullptr);
+}
+catch (...)
+{
+ vte::log_exception();
+ return nullptr;
+}
+
+/**
* vte_terminal_get_icon_title:
* @terminal: a #VteTerminal
*