diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
--- vte-0.32.2-old/src/vte.c	2012-07-13 21:09:04.003969877 -0400
+++ vte-0.32.2/src/vte.c	2012-08-30 04:30:04.285924831 -0400
@@ -129,7 +129,6 @@
 						 gpointer data,
 						 GArray *attributes,
 						 gboolean include_trailing_spaces);
-static void _vte_terminal_disconnect_pty_read(VteTerminal *terminal);
 static void _vte_terminal_disconnect_pty_write(VteTerminal *terminal);
 static void vte_terminal_stop_processing (VteTerminal *terminal);
 
@@ -3508,8 +3507,8 @@
 	_vte_debug_print (VTE_DEBUG_IO, "removed poll of vte_terminal_io_read\n");
 	terminal->pvt->pty_input_source = 0;
 }
-static void
-_vte_terminal_connect_pty_read(VteTerminal *terminal)
+void
+vte_terminal_connect_pty_read(VteTerminal *terminal)
 {
 	if (terminal->pvt->pty_channel == NULL) {
 		return;
@@ -3560,8 +3559,8 @@
 	}
 }
 
-static void
-_vte_terminal_disconnect_pty_read(VteTerminal *terminal)
+void
+vte_terminal_disconnect_pty_read(VteTerminal *terminal)
 {
 	if (terminal->pvt->pty_input_source != 0) {
 		_vte_debug_print (VTE_DEBUG_IO, "disconnecting poll of vte_terminal_io_read\n");
@@ -3708,8 +3707,8 @@
         return NULL;
 }
 
-static char *
-_vte_terminal_get_user_shell_with_fallback (void)
+char *
+vte_terminal_get_user_shell_with_fallback (void)
 {
         char *command;
         const gchar *env;
@@ -3744,7 +3743,7 @@
 	char **argv2;
         char *shell = NULL;
 
-        argv2 = __vte_pty_get_argv(command ? command : (shell = _vte_terminal_get_user_shell_with_fallback ()),
+        argv2 = __vte_pty_get_argv(command ? command : (shell = vte_terminal_get_user_shell_with_fallback ()),
                                    argv,
                                    flags);
         g_free(shell);
@@ -6545,6 +6544,28 @@
 	}
 }
 
+/**
+ * vte_terminal_set_cursor_position:
+ * @terminal: a #VteTerminal
+ * @column: the new cursor column
+ * @row: the new cursor row
+ *
+ * Set the location of the cursor.
+ */
+void
+vte_terminal_set_cursor_position(VteTerminal *terminal,
+				 long column, long row)
+{
+	g_return_if_fail(VTE_IS_TERMINAL(terminal));
+
+	_vte_invalidate_cursor_once(terminal, FALSE);
+	terminal->pvt->screen->cursor_current.col = column;
+	terminal->pvt->screen->cursor_current.row = row;
+	_vte_invalidate_cursor_once(terminal, FALSE);
+	_vte_check_cursor_blink(terminal);
+	vte_terminal_queue_cursor_moved(terminal);
+}
+
 static GtkClipboard *
 vte_terminal_clipboard_get(VteTerminal *terminal, GdkAtom board)
 {
@@ -6676,7 +6697,7 @@
 			terminal->pvt->selection_start.row);
 
 	/* Temporarily stop caring about input from the child. */
-	_vte_terminal_disconnect_pty_read(terminal);
+	vte_terminal_disconnect_pty_read(terminal);
 }
 
 static gboolean
@@ -6693,7 +6714,7 @@
 		terminal->pvt->selecting = FALSE;
 
 		/* Reconnect to input from the child if we paused it. */
-		_vte_terminal_connect_pty_read(terminal);
+		vte_terminal_connect_pty_read(terminal);
 
 		return TRUE;
 	}
@@ -8994,7 +9015,7 @@
 #endif
 		kill(terminal->pvt->pty_pid, SIGHUP);
 	}
-	_vte_terminal_disconnect_pty_read(terminal);
+	vte_terminal_disconnect_pty_read(terminal);
 	_vte_terminal_disconnect_pty_write(terminal);
 	if (terminal->pvt->pty_channel != NULL) {
 		g_io_channel_unref (terminal->pvt->pty_channel);
@@ -14384,7 +14405,7 @@
         g_object_freeze_notify(object);
 
         if (pvt->pty != NULL) {
-                _vte_terminal_disconnect_pty_read(terminal);
+                vte_terminal_disconnect_pty_read(terminal);
                 _vte_terminal_disconnect_pty_write(terminal);
 
                 if (terminal->pvt->pty_channel != NULL) {
@@ -14440,7 +14461,7 @@
         _vte_terminal_setup_utf8 (terminal);
 
         /* Open channels to listen for input on. */
-        _vte_terminal_connect_pty_read (terminal);
+        vte_terminal_connect_pty_read (terminal);
 
         g_object_notify(object, "pty");
         g_object_notify(object, "pty-object");
@@ -14567,6 +14588,50 @@
 	}
 }
 
+/**
+ * vte_terminal_get_selection_block_mode:
+ * @terminal: a #VteTerminal
+ *
+ * Checks whether or not block selection is enabled.
+ *
+ * Returns: %TRUE if block selection is enabled, %FALSE if not
+ */
+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;
+}
+
+/**
+ * vte_terminal_set_selection_block_mode:
+ * @terminal: a #VteTerminal
+ * @block_mode: whether block selection is enabled
+ *
+ * Sets whether or not block selection is enabled.
+ */
+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;
+}
+
+/**
+ * vte_terminal_select_text:
+ * @terminal: a #VteTerminal
+ * @start_col: the starting column for the selection
+ * @start_row: the starting row for the selection
+ * @end_col: the end column for the selection
+ * @end_row: the end row for the selection
+ *
+ * Sets the current selection region.
+ */
+void
+vte_terminal_select_text(VteTerminal *terminal,
+			 long start_col, long start_row,
+			 long end_col, long end_row) {
+	_vte_terminal_select_text(terminal, start_col, start_row, end_col, end_row, 0, 0);
+}
+
 void
 _vte_terminal_select_text(VteTerminal *terminal,
 			  long start_col, long start_row,
diff -aur vte-0.32.2-old/src/vte.h vte-0.32.2/src/vte.h
--- vte-0.32.2-old/src/vte.h	2012-07-13 21:09:04.003969877 -0400
+++ vte-0.32.2/src/vte.h	2012-08-30 04:30:09.695999432 -0400
@@ -296,6 +296,15 @@
 /* simple manipulation of selection */
 void vte_terminal_select_all(VteTerminal *terminal);
 void vte_terminal_select_none(VteTerminal *terminal);
+gboolean vte_terminal_get_selection_block_mode(VteTerminal *terminal);
+void vte_terminal_set_selection_block_mode(VteTerminal *terminal, gboolean block_mode);
+void vte_terminal_select_text(VteTerminal *terminal,
+                              long start_col, long start_row,
+                              long end_col, long end_row);
+
+/* pause and unpause output */
+void vte_terminal_disconnect_pty_read(VteTerminal *vte);
+void vte_terminal_connect_pty_read(VteTerminal *vte);
 
 /* Set the terminal's size. */
 void vte_terminal_set_size(VteTerminal *terminal,
@@ -435,6 +444,8 @@
 				  GArray *attributes);
 void vte_terminal_get_cursor_position(VteTerminal *terminal,
 				      glong *column, glong *row);
+void vte_terminal_set_cursor_position(VteTerminal *terminal,
+				      long column, long row);
 /* Display string matching:  clear all matching expressions. */
 void vte_terminal_match_clear_all(VteTerminal *terminal);
 
@@ -484,6 +495,7 @@
 VtePty *vte_terminal_get_pty_object(VteTerminal *terminal);
 
 char *vte_get_user_shell (void);
+char *vte_terminal_get_user_shell_with_fallback(void);
 
 /* Accessors for bindings. */
 #if !GTK_CHECK_VERSION (2, 91, 2)
