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 { };