summary refs log tree commit diff
diff options
context:
space:
mode:
authorlethalman <lucabru@src.gnome.org>2014-10-29 15:16:28 +0100
committerlethalman <lucabru@src.gnome.org>2014-10-29 15:16:28 +0100
commitf73f5b9e249dc9266b5c52d5122811e8a40218d5 (patch)
treeea1d927e6d5180e7b31e5ae62d6aefdacca100ba
parenta30e5e4481533cb8abf074d370f6a6bba313bfbe (diff)
parentf53ba30c876f22740be4937d2fb7a70be79215c1 (diff)
downloadnixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.tar
nixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.tar.gz
nixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.tar.bz2
nixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.tar.lz
nixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.tar.xz
nixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.tar.zst
nixlib-f73f5b9e249dc9266b5c52d5122811e8a40218d5.zip
Merge pull request #4237 from k0ral/termite
Upgraded termite to v8, and its dependency vte to v0.38.0
-rw-r--r--pkgs/applications/misc/termite/default.nix8
-rw-r--r--pkgs/desktops/gnome-3/3.12/core/vte/0.38.0.nix43
-rw-r--r--pkgs/desktops/gnome-3/3.12/core/vte/default.nix2
-rw-r--r--pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.0.38.0.patch227
-rw-r--r--pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch185
-rw-r--r--pkgs/desktops/gnome-3/3.12/default.nix4
6 files changed, 377 insertions, 92 deletions
diff --git a/pkgs/applications/misc/termite/default.nix b/pkgs/applications/misc/termite/default.nix
index 37076d242c44..25b3677b4989 100644
--- a/pkgs/applications/misc/termite/default.nix
+++ b/pkgs/applications/misc/termite/default.nix
@@ -2,12 +2,12 @@
 
 stdenv.mkDerivation rec {
   name = "termite-${version}";
-  version = "8";
+  version = "v8";
 
   src = fetchgit {
-    url = "https://github.com/thestinger/termite.git";
-    rev = "05f3bbf626245a344eb74859ef2aa49f715ebd55";
-    sha256 = "01dfg4zg7sgw0cbh0j9sbwdvn43rw7xfcnijfh1dhd6n5yx00b18";
+    url = "https://github.com/thestinger/termite";
+    rev = "7f03ded7308ad0e26b72b150080e4f3e70401815";
+    sha256 = "1yj4jvjwv73a02p8a0yip8q39znlhfc9zdr19zm1zik2k4h62c2l";
   };
 
   makeFlags = "VERSION=v${version}";
diff --git a/pkgs/desktops/gnome-3/3.12/core/vte/0.38.0.nix b/pkgs/desktops/gnome-3/3.12/core/vte/0.38.0.nix
new file mode 100644
index 000000000000..2c10eccb1e83
--- /dev/null
+++ b/pkgs/desktops/gnome-3/3.12/core/vte/0.38.0.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection, vala, libxml2
+, selectTextPatch ? false }:
+
+stdenv.mkDerivation rec {
+  versionMajor = "0.38";
+  versionMinor = "0";
+  moduleName   = "vte";
+
+  name = "${moduleName}-${versionMajor}.${versionMinor}";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${moduleName}/${versionMajor}/${name}.tar.xz";
+    sha256 = "1llg2xnjpn630vd86ci8csbjjacj3ia6syck2bsq4kinr66z5zsw";
+  };
+
+  patches = with stdenv.lib; optional selectTextPatch ./expose_select_text.0.38.0.patch;
+
+  buildInputs = [ gobjectIntrospection intltool pkgconfig gnome3.glib gnome3.gtk3 ncurses vala libxml2 ];
+
+  configureFlags = [ "--enable-introspection" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    substituteInPlace $out/lib/libvte2_90.la --replace "-lncurses" "-L${ncurses}/lib -lncurses"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = http://www.gnome.org/;
+    description = "A library implementing a terminal emulator widget for GTK+";
+    longDescription = ''
+      VTE is a library (libvte) implementing a terminal emulator widget for
+      GTK+, and a minimal sample application (vte) using that.  Vte is
+      mainly used in gnome-terminal, but can also be used to embed a
+      console/terminal in games, editors, IDEs, etc. VTE supports Unicode and
+      character set conversion, as well as emulating any terminal known to
+      the system's terminfo database.
+    '';
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ astsmtl antono lethalman ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/desktops/gnome-3/3.12/core/vte/default.nix b/pkgs/desktops/gnome-3/3.12/core/vte/default.nix
index f63ae98c4866..d3245e232edd 100644
--- a/pkgs/desktops/gnome-3/3.12/core/vte/default.nix
+++ b/pkgs/desktops/gnome-3/3.12/core/vte/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection, vala, libxml2
+{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection
 , selectTextPatch ? false }:
 
 stdenv.mkDerivation rec {
diff --git a/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.0.38.0.patch b/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.0.38.0.patch
new file mode 100644
index 000000000000..0a9b82a85982
--- /dev/null
+++ b/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.0.38.0.patch
@@ -0,0 +1,227 @@
+Only in vte-0.38.0.new: expose_select_text.patch
+diff -aur vte-0.38.0/src/vteaccess.c vte-0.38.0.new/src/vteaccess.c
+--- vte-0.38.0/src/vteaccess.c	2014-08-13 08:00:38.000000000 -0400
++++ vte-0.38.0.new/src/vteaccess.c	2014-09-21 17:05:23.934641193 -0400
+@@ -1427,7 +1427,7 @@
+ 	*start_offset = offset_from_xy (priv, start_x, start_y);
+ 	_vte_terminal_get_end_selection (terminal, &end_x, &end_y);
+ 	*end_offset = offset_from_xy (priv, end_x, end_y);
+-	return _vte_terminal_get_selection (terminal);
++	return vte_terminal_get_selection (terminal);
+ }
+ 
+ static gboolean
+diff -aur vte-0.38.0/src/vte.c vte-0.38.0.new/src/vte.c
+--- vte-0.38.0/src/vte.c	2014-09-13 03:23:47.000000000 -0400
++++ vte-0.38.0.new/src/vte.c	2014-09-21 17:03:04.671656749 -0400
+@@ -122,7 +122,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);
+ 
+@@ -3267,9 +3266,10 @@
+ 	_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)
+ {
++	g_return_if_fail(VTE_IS_TERMINAL(terminal));
+ 	if (terminal->pvt->pty_channel == NULL) {
+ 		return;
+ 	}
+@@ -3321,9 +3321,10 @@
+ 	}
+ }
+ 
+-static void
+-_vte_terminal_disconnect_pty_read(VteTerminal *terminal)
++void
++vte_terminal_disconnect_pty_read(VteTerminal *terminal)
+ {
++	g_return_if_fail(VTE_IS_TERMINAL(terminal));
+ 	if (terminal->pvt->pty_input_source != 0) {
+ 		_vte_debug_print (VTE_DEBUG_IO, "disconnecting poll of vte_terminal_io_read\n");
+ 		g_source_remove(terminal->pvt->pty_input_source);
+@@ -6154,6 +6155,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)
+ {
+@@ -6319,7 +6342,7 @@
+         vte_terminal_extend_selection(terminal, x, y, FALSE, TRUE);
+ 
+ 	/* Temporarily stop caring about input from the child. */
+-	_vte_terminal_disconnect_pty_read(terminal);
++	vte_terminal_disconnect_pty_read(terminal);
+ }
+ 
+ static gboolean
+@@ -6336,7 +6359,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;
+ 	}
+@@ -6834,6 +6857,50 @@
+ 	vte_terminal_deselect_all (terminal);
+ }
+ 
++/**
++ * 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);
++}
++
+ /* Autoscroll a bit. */
+ static gboolean
+ vte_terminal_autoscroll(VteTerminal *terminal)
+@@ -8476,7 +8543,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);
+@@ -12533,7 +12600,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) {
+@@ -12588,7 +12655,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");
+ 
+@@ -12623,7 +12690,7 @@
+ }
+ 
+ char *
+-_vte_terminal_get_selection(VteTerminal *terminal)
++vte_terminal_get_selection(VteTerminal *terminal)
+ {
+ 	g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL);
+ 
+Only in vte-0.38.0.new/src: .vte.c.swp
+diff -aur vte-0.38.0/src/vteint.h vte-0.38.0.new/src/vteint.h
+--- vte-0.38.0/src/vteint.h	2014-05-16 13:51:26.000000000 -0400
++++ vte-0.38.0.new/src/vteint.h	2014-09-21 17:05:44.934589281 -0400
+@@ -25,7 +25,6 @@
+ G_BEGIN_DECLS
+ 
+ void _vte_terminal_accessible_ref(VteTerminal *terminal);
+-char* _vte_terminal_get_selection(VteTerminal *terminal);
+ void _vte_terminal_get_start_selection(VteTerminal *terminal, long *x, long *y);
+ void _vte_terminal_get_end_selection(VteTerminal *terminal, long *x, long *y);
+ void _vte_terminal_select_text(VteTerminal *terminal, long start_x, long start_y, long end_x, long end_y, int start_offset, int end_offset);
+diff -aur vte-0.38.0/src/vteterminal.h vte-0.38.0.new/src/vteterminal.h
+--- vte-0.38.0/src/vteterminal.h	2014-09-13 03:23:47.000000000 -0400
++++ vte-0.38.0.new/src/vteterminal.h	2014-09-21 17:03:39.094903032 -0400
+@@ -170,6 +170,18 @@
+ 
+ void vte_terminal_select_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
+ void vte_terminal_unselect_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
++gboolean vte_terminal_get_selection_block_mode(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
++void vte_terminal_set_selection_block_mode(VteTerminal *terminal,
++                                           gboolean block_mode) _VTE_GNUC_NONNULL(1);
++void vte_terminal_select_text(VteTerminal *terminal,
++                              long start_col, long start_row,
++                              long end_col, long end_row) _VTE_GNUC_NONNULL(1);
++char *
++vte_terminal_get_selection(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
++
++/* 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,
+@@ -276,6 +288,8 @@
+ void vte_terminal_get_cursor_position(VteTerminal *terminal,
+ 				      glong *column,
+                                       glong *row) _VTE_GNUC_NONNULL(1);
++void vte_terminal_set_cursor_position(VteTerminal *terminal,
++				      long column, long row) _VTE_GNUC_NONNULL(1);
+ 
+ /* Add a matching expression, returning the tag the widget assigns to that
+  * expression. */
diff --git a/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch b/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch
index 80a2a445ec03..0a9b82a85982 100644
--- a/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch
+++ b/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch
@@ -1,7 +1,20 @@
-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 @@
+Only in vte-0.38.0.new: expose_select_text.patch
+diff -aur vte-0.38.0/src/vteaccess.c vte-0.38.0.new/src/vteaccess.c
+--- vte-0.38.0/src/vteaccess.c	2014-08-13 08:00:38.000000000 -0400
++++ vte-0.38.0.new/src/vteaccess.c	2014-09-21 17:05:23.934641193 -0400
+@@ -1427,7 +1427,7 @@
+ 	*start_offset = offset_from_xy (priv, start_x, start_y);
+ 	_vte_terminal_get_end_selection (terminal, &end_x, &end_y);
+ 	*end_offset = offset_from_xy (priv, end_x, end_y);
+-	return _vte_terminal_get_selection (terminal);
++	return vte_terminal_get_selection (terminal);
+ }
+ 
+ static gboolean
+diff -aur vte-0.38.0/src/vte.c vte-0.38.0.new/src/vte.c
+--- vte-0.38.0/src/vte.c	2014-09-13 03:23:47.000000000 -0400
++++ vte-0.38.0.new/src/vte.c	2014-09-21 17:03:04.671656749 -0400
+@@ -122,7 +122,6 @@
  						 gpointer data,
  						 GArray *attributes,
  						 gboolean include_trailing_spaces);
@@ -9,7 +22,7 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
  static void _vte_terminal_disconnect_pty_write(VteTerminal *terminal);
  static void vte_terminal_stop_processing (VteTerminal *terminal);
  
-@@ -3508,8 +3507,8 @@
+@@ -3267,9 +3266,10 @@
  	_vte_debug_print (VTE_DEBUG_IO, "removed poll of vte_terminal_io_read\n");
  	terminal->pvt->pty_input_source = 0;
  }
@@ -18,9 +31,11 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
 +void
 +vte_terminal_connect_pty_read(VteTerminal *terminal)
  {
++	g_return_if_fail(VTE_IS_TERMINAL(terminal));
  	if (terminal->pvt->pty_channel == NULL) {
  		return;
-@@ -3560,8 +3559,8 @@
+ 	}
+@@ -3321,9 +3321,10 @@
  	}
  }
  
@@ -29,29 +44,11 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
 +void
 +vte_terminal_disconnect_pty_read(VteTerminal *terminal)
  {
++	g_return_if_fail(VTE_IS_TERMINAL(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 @@
+ 		g_source_remove(terminal->pvt->pty_input_source);
+@@ -6154,6 +6155,28 @@
  	}
  }
  
@@ -80,8 +77,8 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
  static GtkClipboard *
  vte_terminal_clipboard_get(VteTerminal *terminal, GdkAtom board)
  {
-@@ -6676,7 +6697,7 @@
- 			terminal->pvt->selection_start.row);
+@@ -6319,7 +6342,7 @@
+         vte_terminal_extend_selection(terminal, x, y, FALSE, TRUE);
  
  	/* Temporarily stop caring about input from the child. */
 -	_vte_terminal_disconnect_pty_read(terminal);
@@ -89,7 +86,7 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
  }
  
  static gboolean
-@@ -6693,7 +6714,7 @@
+@@ -6336,7 +6359,7 @@
  		terminal->pvt->selecting = FALSE;
  
  		/* Reconnect to input from the child if we paused it. */
@@ -98,35 +95,8 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
  
  		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 @@
- 	}
+@@ -6834,6 +6857,50 @@
+ 	vte_terminal_deselect_all (terminal);
  }
  
 +/**
@@ -173,21 +143,72 @@ diff -aur vte-0.32.2-old/src/vte.c vte-0.32.2/src/vte.c
 +	_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);
+ /* Autoscroll a bit. */
+ static gboolean
+ vte_terminal_autoscroll(VteTerminal *terminal)
+@@ -8476,7 +8543,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);
+@@ -12533,7 +12600,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) {
+@@ -12588,7 +12655,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");
+ 
+@@ -12623,7 +12690,7 @@
+ }
+ 
+ char *
+-_vte_terminal_get_selection(VteTerminal *terminal)
++vte_terminal_get_selection(VteTerminal *terminal)
+ {
+ 	g_return_val_if_fail(VTE_IS_TERMINAL(terminal), NULL);
+ 
+Only in vte-0.38.0.new/src: .vte.c.swp
+diff -aur vte-0.38.0/src/vteint.h vte-0.38.0.new/src/vteint.h
+--- vte-0.38.0/src/vteint.h	2014-05-16 13:51:26.000000000 -0400
++++ vte-0.38.0.new/src/vteint.h	2014-09-21 17:05:44.934589281 -0400
+@@ -25,7 +25,6 @@
+ G_BEGIN_DECLS
+ 
+ void _vte_terminal_accessible_ref(VteTerminal *terminal);
+-char* _vte_terminal_get_selection(VteTerminal *terminal);
+ void _vte_terminal_get_start_selection(VteTerminal *terminal, long *x, long *y);
+ void _vte_terminal_get_end_selection(VteTerminal *terminal, long *x, long *y);
+ void _vte_terminal_select_text(VteTerminal *terminal, long start_x, long start_y, long end_x, long end_y, int start_offset, int end_offset);
+diff -aur vte-0.38.0/src/vteterminal.h vte-0.38.0.new/src/vteterminal.h
+--- vte-0.38.0/src/vteterminal.h	2014-09-13 03:23:47.000000000 -0400
++++ vte-0.38.0.new/src/vteterminal.h	2014-09-21 17:03:39.094903032 -0400
+@@ -170,6 +170,18 @@
+ 
+ void vte_terminal_select_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
+ void vte_terminal_unselect_all(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
++gboolean vte_terminal_get_selection_block_mode(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
++void vte_terminal_set_selection_block_mode(VteTerminal *terminal,
++                                           gboolean block_mode) _VTE_GNUC_NONNULL(1);
 +void vte_terminal_select_text(VteTerminal *terminal,
 +                              long start_col, long start_row,
-+                              long end_col, long end_row);
++                              long end_col, long end_row) _VTE_GNUC_NONNULL(1);
++char *
++vte_terminal_get_selection(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
 +
 +/* pause and unpause output */
 +void vte_terminal_disconnect_pty_read(VteTerminal *vte);
@@ -195,20 +216,12 @@ diff -aur vte-0.32.2-old/src/vte.h vte-0.32.2/src/vte.h
  
  /* Set the terminal's size. */
  void vte_terminal_set_size(VteTerminal *terminal,
-@@ -435,6 +444,8 @@
- 				  GArray *attributes);
+@@ -276,6 +288,8 @@
  void vte_terminal_get_cursor_position(VteTerminal *terminal,
- 				      glong *column, glong *row);
+ 				      glong *column,
+                                       glong *row) _VTE_GNUC_NONNULL(1);
 +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);
++				      long column, long row) _VTE_GNUC_NONNULL(1);
  
- /* Accessors for bindings. */
- #if !GTK_CHECK_VERSION (2, 91, 2)
+ /* Add a matching expression, returning the tag the widget assigns to that
+  * expression. */
diff --git a/pkgs/desktops/gnome-3/3.12/default.nix b/pkgs/desktops/gnome-3/3.12/default.nix
index cff592cd063e..9551e0bae880 100644
--- a/pkgs/desktops/gnome-3/3.12/default.nix
+++ b/pkgs/desktops/gnome-3/3.12/default.nix
@@ -168,7 +168,9 @@ rec {
 
   vte = callPackage ./core/vte { };
 
-  vte-select-text = callPackage ./core/vte { selectTextPatch = true; };
+  vte_038 = callPackage ./core/vte/0.38.0.nix { }; # To be moved in gnome 3.14 when available
+
+  vte-select-text = vte_038.override { selectTextPatch = true; };
 
   vino = callPackage ./core/vino { };