Description: Exposes hidden selection API.
 Adds following functions:
 vte_terminal_select_empty_at,
 vte_terminal_select_text,
 vte_terminal_get_start_selection,
 vte_terminal_get_end_selection,
 vte_terminal_get_selection,
 vte_terminal_get_selection_block_mode,
 vte_terminal_set_selection_block_mode.
 vte_terminal_get_data_row_count - function that returns number of rows in screen
 buffer.
 vte_terminal_copy - this function is needed to copy current selection
 to clipboard.

 It will allow applications to control text selection better. For example - with
 keyboard.

--- vte-0.28.2.orig/src/vte.c
+++ vte-0.28.2/src/vte.c
@@ -6525,7 +6525,7 @@ vte_terminal_clipboard_get(VteTerminal *
 
 /* Place the selected text onto the clipboard.  Do this asynchronously so that
  * we get notified when the selection we placed on the clipboard is replaced. */
-static void
+void
 vte_terminal_copy(VteTerminal *terminal, GdkAtom board)
 {
 	GtkClipboard *clipboard;
@@ -15426,3 +15426,66 @@ vte_terminal_search_find_next (VteTermin
 {
 	return vte_terminal_search_find (terminal, FALSE);
 }
+
+
+gboolean
+vte_terminal_get_selection_block_mode (VteTerminal *terminal) {
+    g_return_val_if_fail (VTE_IS_TERMINAL(terminal), FALSE);
+    return terminal->pvt->selection_block_mode;
+}
+
+
+void
+vte_terminal_set_selection_block_mode (VteTerminal *terminal, gboolean block_mode) {
+    g_return_if_fail (VTE_IS_TERMINAL(terminal));
+    terminal->pvt->selection_block_mode = block_mode;
+}
+
+
+void
+vte_terminal_select_empty_at (VteTerminal *terminal, long col, long row)
+{
+    g_return_if_fail (VTE_IS_TERMINAL(terminal));
+    _vte_terminal_select_empty_at (terminal, col, row);
+}
+
+void
+vte_terminal_select_text (VteTerminal *terminal,
+                          long start_col,
+                          long start_row,
+                          long end_col,
+                          long end_row) {
+    g_return_if_fail (VTE_IS_TERMINAL(terminal));
+    _vte_terminal_select_text (terminal, start_col, start_row, end_col, end_row, 0, 0);
+}
+
+
+void
+vte_terminal_get_start_selection (VteTerminal *terminal, long *col, long *row)
+{
+    g_return_if_fail (VTE_IS_TERMINAL(terminal));
+    _vte_terminal_get_start_selection (terminal, col, row);
+}
+
+
+void
+vte_terminal_get_end_selection (VteTerminal *terminal, long *col, long *row)
+{
+    g_return_if_fail (VTE_IS_TERMINAL(terminal));
+    _vte_terminal_get_end_selection (terminal, col, row);
+}
+
+
+char *
+vte_terminal_get_selection (VteTerminal *terminal)
+{
+    g_return_if_fail (VTE_IS_TERMINAL(terminal));
+    return _vte_terminal_get_selection (terminal);
+}
+
+
+glong
+vte_terminal_get_data_row_count (VteTerminal *terminal)
+{
+	return terminal->pvt->screen->row_data[0].end - terminal->pvt->screen->row_data[0].start;
+}
--- vte-0.28.2.orig/src/vte.h
+++ vte-0.28.2/src/vte.h
@@ -296,6 +296,13 @@ void vte_terminal_paste_primary(VteTermi
 /* simple manipulation of selection */
 void vte_terminal_select_all(VteTerminal *terminal);
 void vte_terminal_select_none(VteTerminal *terminal);
+void vte_terminal_select_empty_at(VteTerminal *terminal, long col, long row);
+void vte_terminal_select_text(VteTerminal *terminal, long start_col, long start_row, long end_col, long end_row);
+void vte_terminal_get_start_selection(VteTerminal *terminal, long *col, long *row);
+void vte_terminal_get_end_selection(VteTerminal *terminal, long *col, long *row);
+char *vte_terminal_get_selection(VteTerminal *terminal);
+gboolean vte_terminal_get_selection_block_mode(VteTerminal *terminal);
+void vte_terminal_set_selection_block_mode(VteTerminal *terminal, gboolean block_mode);
 
 /* Set the terminal's size. */
 void vte_terminal_set_size(VteTerminal *terminal,
@@ -522,6 +529,9 @@ gboolean vte_terminal_write_contents (Vt
 #undef _VTE_SEAL
 #undef _VTE_DEPRECATED
 
+glong vte_terminal_get_data_row_count (VteTerminal *terminal);
+void vte_terminal_copy(VteTerminal *terminal, GdkAtom board);
+
 G_END_DECLS
 
 #ifndef VTE_DISABLE_DEPRECATED
