about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/applications/misc/termite/default.nix26
-rw-r--r--pkgs/desktops/gnome-3/3.12/core/vte/default.nix6
-rw-r--r--pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch214
-rw-r--r--pkgs/desktops/gnome-3/3.12/default.nix4
-rw-r--r--pkgs/top-level/all-packages.nix5
5 files changed, 252 insertions, 3 deletions
diff --git a/pkgs/applications/misc/termite/default.nix b/pkgs/applications/misc/termite/default.nix
new file mode 100644
index 000000000000..96ca38f581f8
--- /dev/null
+++ b/pkgs/applications/misc/termite/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, fetchgit, pkgconfig, vte, gtk, ncurses }:
+
+stdenv.mkDerivation rec {
+  name = "termite-${version}";
+  version = "v7";
+
+  src = fetchgit {
+    url = "https://github.com/thestinger/termite";
+    rev = "f0ff025c1bb6a1e3fd83072f00c2dc42a0701f46";
+    sha256 = "057yzlqvp84fkmhn4bz9071glj4rh4187xhg48cdppf2w6phcbxp";
+  };
+
+  makeFlags = "VERSION=${version}";
+
+  buildInputs = [pkgconfig vte gtk ncurses];
+
+  installFlags = "PREFIX=$(out)";
+
+  meta = {
+    description = "A simple VTE-based terminal";
+    license = stdenv.lib.licenses.lgpl2Plus;
+    homepage = https://github.com/thestinger/termite/;
+    maintainers = with stdenv.lib.maintainers; [koral];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
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 011424820e82..f63ae98c4866 100644
--- a/pkgs/desktops/gnome-3/3.12/core/vte/default.nix
+++ b/pkgs/desktops/gnome-3/3.12/core/vte/default.nix
@@ -1,7 +1,7 @@
-{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection }:
+{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection, vala, libxml2
+, selectTextPatch ? false }:
 
 stdenv.mkDerivation rec {
-
   versionMajor = "0.36";
   versionMinor = "3";
   moduleName   = "vte";
@@ -13,6 +13,8 @@ stdenv.mkDerivation rec {
     sha256 = "54e5b07be3c0f7b158302f54ee79d4de1cb002f4259b6642b79b1e0e314a959c";
   };
 
+  patches = with stdenv.lib; optional selectTextPatch ./expose_select_text.patch;
+
   buildInputs = [ gobjectIntrospection intltool pkgconfig gnome3.glib gnome3.gtk3 ncurses ];
 
   configureFlags = [ "--enable-introspection" ];
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
new file mode 100644
index 000000000000..80a2a445ec03
--- /dev/null
+++ b/pkgs/desktops/gnome-3/3.12/core/vte/expose_select_text.patch
@@ -0,0 +1,214 @@
+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)
diff --git a/pkgs/desktops/gnome-3/3.12/default.nix b/pkgs/desktops/gnome-3/3.12/default.nix
index 586c66e84941..53f5ff0949b4 100644
--- a/pkgs/desktops/gnome-3/3.12/default.nix
+++ b/pkgs/desktops/gnome-3/3.12/default.nix
@@ -168,6 +168,8 @@ rec {
 
   vte = callPackage ./core/vte { };
 
+  vte-select-text = callPackage ./core/vte { selectTextPatch = true; };
+
   vino = callPackage ./core/vino { };
 
   yelp = callPackage ./core/yelp { };
@@ -232,7 +234,7 @@ rec {
   libgit2-glib = callPackage ./misc/libgit2-glib { };
 
   libmediaart = callPackage ./misc/libmediaart { };
-  
+
   gexiv2 = callPackage ./misc/gexiv2 { };
 
   gnome-tweak-tool = callPackage ./misc/gnome-tweak-tool { };
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index bb4c48148b67..6472cb0994a6 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10103,6 +10103,11 @@ let
     inherit (pythonPackages) notify;
   };
 
+  termite = callPackage ../applications/misc/termite {
+    gtk = gtk3;
+    vte = gnome3_12.vte-select-text;
+   };
+
   tesseract = callPackage ../applications/graphics/tesseract { };
 
   thinkingRock = callPackage ../applications/misc/thinking-rock { };