summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenny Ballou <kballou@devnulllabs.io>2018-08-08 07:43:21 -0600
committerKenny Ballou <kballou@devnulllabs.io>2018-08-12 20:46:28 -0600
commita9ab53644f5fea90a507d137e29941f660c9c6f0 (patch)
tree7285c035424e99ba2c4a1a58045b5d2a6ed2fad2
parentc700366d6656d876a5e66c5355f498ef871c3e7e (diff)
downloadgentoo-a9ab53644f5fea90a507d137e29941f660c9c6f0.tar.gz
gentoo-a9ab53644f5fea90a507d137e29941f660c9c6f0.tar.xz
x11-libs/vte: add new vte version 0.50.4.
Add new ebuild for x11-libs/vte-0.50.4. Move `command-notify` patch into the `files` directory, instead of downloading from https://dev.gentoo.org/~eva/distfiles/vte. Bug: https://bugs.gentoo.org/654834 Package-Manager: Portage-2.3.40, Repoman-2.3.9
-rw-r--r--x11-libs/vte/Manifest1
-rw-r--r--x11-libs/vte/files/vte-0.50.4-command-notify.patch587
-rw-r--r--x11-libs/vte/vte-0.50.4.ebuild90
3 files changed, 678 insertions, 0 deletions
diff --git a/x11-libs/vte/Manifest b/x11-libs/vte/Manifest
index cffcf243ce9..8df6f59f83a 100644
--- a/x11-libs/vte/Manifest
+++ b/x11-libs/vte/Manifest
@@ -2,3 +2,4 @@ DIST vte-0.28.2.tar.xz 962340 BLAKE2B 1e4b5977962265be77917ccfc9118ed93232c03d7a
DIST vte-0.36.5.tar.xz 1017504 BLAKE2B a7a94b389660f9bbf7aa8033e4a5e2cc96c39458e43960ad2ce785f2fbe1597c7156d090aab220e909ae31f8731d0d961686dce08aef0f270581c01de4bf19b0 SHA512 43f9211381238ca6cb7f49c8a9dd8f48f702e9968e038fa26ee69228c1fc86061d5dbfabb2c27f677280e89ae9080f20594f3c27481246e3f91dd5f3ea0354f6
DIST vte-0.48.4-command-notify.patch.xz 5500 BLAKE2B 88b655403d2bef034604a283b173fece305af35f51b20f9d4811b33265b5a6eb83441e0b978539de501d118a8431c4a9a9a69a111a03c45adc87763b15b09fd2 SHA512 b8ba202aedb5d821962a7cdc89e6ef8ac8a3480dd7681bf8ce708ce511598f3335ba153750d40cb06e9a2c5bab5888b3daef9096458c2889d94028feaa394575
DIST vte-0.48.4.tar.xz 1008296 BLAKE2B 9f946d6909d38896ec80db2a02666d809155997b27109724fb318d28200220f1514fb23e4cdc90263a756914b5db442c947578c8854a535cb960a06f7bc03a77 SHA512 4b75bd881e58b5043bc44e391ef3a826a2c25d0f1bb5ffb890367e11a60b1bcbce091575ede6972a89ae043b39c51897f91fca1faf6872664d602e503d8020fc
+DIST vte-0.50.4.tar.xz 1010300 BLAKE2B 26815da57a2599da14bc7c6c2ea4b845e0a22c8e3eee6b3fbbdab9226d2f6e08712b375656c67af64be0416b789406554cd1aa3ec53081b6c672d1ff122e8f87 SHA512 99264a31ca45655888f54ded5525bd0cc42949095a9dcdc84c5cce5f7cdf94af801c48112837b73ef91c15754d3773002b131410509a1feb9e6eaec12190c228
diff --git a/x11-libs/vte/files/vte-0.50.4-command-notify.patch b/x11-libs/vte/files/vte-0.50.4-command-notify.patch
new file mode 100644
index 00000000000..486f142f7ed
--- /dev/null
+++ b/x11-libs/vte/files/vte-0.50.4-command-notify.patch
@@ -0,0 +1,587 @@
+From f9b37dddd022d36b3c7c0caf6ce45b8894a7cec4 Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir@gnome.org>
+Date: Wed, 7 Jan 2015 16:01:00 +0100
+Subject: [PATCH 1/5] Add sequences and signals for desktop notification
+
+Add sequences
+ OSC 777 ; notify ; SUMMARY ; BODY BEL
+ OSC 777 ; notify ; SUMMARY BEL
+ OSC 777 ; notify ; SUMMARY ; BODY ST
+ OSC 777 ; notify ; SUMMARY ST
+
+that let terminal applications send a notification to the desktop
+environment.
+
+Based on Enlightenment's Terminology:
+https://phab.enlightenment.org/T1765
+
+https://bugzilla.gnome.org/show_bug.cgi?id=711059
+---
+ src/caps.cc | 4 +++
+ src/marshal.list | 1 +
+ src/vte.cc | 12 +++++++
+ src/vte/vteterminal.h | 4 ++-
+ src/vtegtk.cc | 21 ++++++++++++
+ src/vtegtk.hh | 1 +
+ src/vteinternal.hh | 5 +++
+ src/vteseq-n.gperf | 1 +
+ src/vteseq.cc | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ 9 files changed, 138 insertions(+), 1 deletion(-)
+
+diff --git a/src/caps.cc b/src/caps.cc
+index 1f9cd1ed..7262aeb2 100644
+--- a/src/caps.cc
++++ b/src/caps.cc
+@@ -257,6 +257,8 @@ const char _vte_xterm_capability_strings[] =
+ ENTRY(OSC "119" BEL, "reset-highlight-foreground-color")
+ ENTRY(OSC "133;%s" BEL, "iterm2-133")
+ ENTRY(OSC "777;%s" BEL, "urxvt-777")
++ ENTRY(OSC "777;%s;%s;%s" BEL, "send-notification")
++ ENTRY(OSC "777;%s;%s" BEL, "send-notification")
+ ENTRY(OSC "1337;%s" BEL, "iterm2-1337")
+
+ COMMENT(/* Set text parameters, ST-terminated versions. */)
+@@ -296,6 +298,8 @@ const char _vte_xterm_capability_strings[] =
+ ENTRY(OSC "119" ST, "reset-highlight-foreground-color")
+ ENTRY(OSC "133;%s" ST, "iterm2-133")
+ ENTRY(OSC "777;%s" ST, "urxvt-777")
++ ENTRY(OSC "777;%s;%s;%s" ST, "send-notification")
++ ENTRY(OSC "777;%s;%s" ST, "send-notification")
+ ENTRY(OSC "1337;%s" ST, "iterm2-1337")
+
+ COMMENT(/* These may be bogus, I can't find docs for them anywhere (#104154). */)
+diff --git a/src/marshal.list b/src/marshal.list
+index 0276422e..2c35c685 100644
+--- a/src/marshal.list
++++ b/src/marshal.list
+@@ -1,4 +1,5 @@
+ VOID:INT,INT
+ VOID:OBJECT,OBJECT
++VOID:STRING,STRING
+ VOID:STRING,UINT
+ VOID:UINT,UINT
+diff --git a/src/vte.cc b/src/vte.cc
+index fdb9c0b6..a162c3f5 100644
+--- a/src/vte.cc
++++ b/src/vte.cc
+@@ -8318,6 +8318,9 @@ VteTerminalPrivate::~VteTerminalPrivate()
+
+ remove_update_timeout(this);
+
++ g_free (m_notification_summary);
++ g_free (m_notification_body);
++
+ /* discard title updates */
+ g_free(m_window_title);
+ g_free(m_window_title_changed);
+@@ -10349,6 +10352,15 @@ VteTerminalPrivate::emit_pending_signals()
+
+ emit_adjustment_changed();
+
++ if (m_notification_received) {
++ _vte_debug_print (VTE_DEBUG_SIGNALS,
++ "Emitting `notification-received'.\n");
++ g_signal_emit(object, signals[SIGNAL_NOTIFICATION_RECEIVED], 0,
++ m_notification_summary,
++ m_notification_body);
++ m_notification_received = FALSE;
++ }
++
+ if (m_window_title_changed) {
+ g_free (m_window_title);
+ m_window_title = m_window_title_changed;
+diff --git a/src/vte/vteterminal.h b/src/vte/vteterminal.h
+index 3b22c4a5..9ab32aef 100644
+--- a/src/vte/vteterminal.h
++++ b/src/vte/vteterminal.h
+@@ -104,8 +104,10 @@ struct _VteTerminalClass {
+
+ void (*bell)(VteTerminal* terminal);
+
++ void (*notification_received)(VteTerminal* terminal, const gchar *summary, const gchar *body);
++
+ /* Padding for future expansion. */
+- gpointer padding[16];
++ gpointer padding[15];
+
+ VteTerminalClassPrivate *priv;
+ };
+diff --git a/src/vtegtk.cc b/src/vtegtk.cc
+index 579d83b9..81d943e2 100644
+--- a/src/vtegtk.cc
++++ b/src/vtegtk.cc
+@@ -669,6 +669,7 @@ vte_terminal_class_init(VteTerminalClass *klass)
+ klass->child_exited = NULL;
+ klass->encoding_changed = NULL;
+ klass->char_size_changed = NULL;
++ klass->notification_received = NULL;
+ klass->window_title_changed = NULL;
+ klass->icon_title_changed = NULL;
+ klass->selection_changed = NULL;
+@@ -744,6 +745,26 @@ vte_terminal_class_init(VteTerminalClass *klass)
+ G_TYPE_NONE,
+ 1, G_TYPE_INT);
+
++ /**
++ * VteTerminal::notification-received:
++ * @vteterminal: the object which received the signal
++ * @summary: The summary
++ * @body: (allow-none): Extra optional text
++ *
++ * Emitted when a process running in the terminal wants to
++ * send a notification to the desktop environment.
++ */
++ signals[SIGNAL_NOTIFICATION_RECEIVED] =
++ g_signal_new(I_("notification-received"),
++ G_OBJECT_CLASS_TYPE(klass),
++ G_SIGNAL_RUN_LAST,
++ G_STRUCT_OFFSET(VteTerminalClass, notification_received),
++ NULL,
++ NULL,
++ _vte_marshal_VOID__STRING_STRING,
++ G_TYPE_NONE,
++ 2, G_TYPE_STRING, G_TYPE_STRING);
++
+ /**
+ * VteTerminal::window-title-changed:
+ * @vteterminal: the object which received the signal
+diff --git a/src/vtegtk.hh b/src/vtegtk.hh
+index 5340725d..f8a83525 100644
+--- a/src/vtegtk.hh
++++ b/src/vtegtk.hh
+@@ -55,6 +55,7 @@ enum {
+ SIGNAL_TEXT_INSERTED,
+ SIGNAL_TEXT_MODIFIED,
+ SIGNAL_TEXT_SCROLLED,
++ SIGNAL_NOTIFICATION_RECEIVED,
+ SIGNAL_WINDOW_TITLE_CHANGED,
+ LAST_SIGNAL
+ };
+diff --git a/src/vteinternal.hh b/src/vteinternal.hh
+index 3a8acfc9..e5fba41d 100644
+--- a/src/vteinternal.hh
++++ b/src/vteinternal.hh
+@@ -495,6 +495,11 @@ public:
+ gboolean m_cursor_moved_pending;
+ gboolean m_contents_changed_pending;
+
++ /* desktop notification */
++ gboolean m_notification_received;
++ gchar *m_notification_summary;
++ gchar *m_notification_body;
++
+ /* window name changes */
+ char* m_window_title;
+ char* m_window_title_changed;
+diff --git a/src/vteseq-n.gperf b/src/vteseq-n.gperf
+index 7cd1de50..bf0ffe9c 100644
+--- a/src/vteseq-n.gperf
++++ b/src/vteseq-n.gperf
+@@ -173,3 +173,4 @@ struct vteseq_n_struct {
+ "urxvt-777", VTE_SEQUENCE_HANDLER(vte_sequence_handler_urxvt_777)
+ "iterm2-133", VTE_SEQUENCE_HANDLER(vte_sequence_handler_iterm2_133)
+ "iterm2-1337", VTE_SEQUENCE_HANDLER(vte_sequence_handler_iterm2_1337)
++"send-notification", VTE_SEQUENCE_HANDLER(vte_sequence_handler_send_notification)
+diff --git a/src/vteseq.cc b/src/vteseq.cc
+index 45fdcc24..f2d163b8 100644
+--- a/src/vteseq.cc
++++ b/src/vteseq.cc
+@@ -2340,6 +2340,96 @@ vte_sequence_handler_return_terminal_id (VteTerminalPrivate *that, GValueArray *
+ vte_sequence_handler_send_primary_device_attributes (that, params);
+ }
+
++static void
++vte_sequence_handler_send_notification (VteTerminalPrivate *that, GValueArray *params)
++{
++ GValue *value;
++ const char *end;
++ char *option = NULL;
++ char *str = NULL;
++ char *p, *validated;
++
++ g_clear_pointer (&that->m_notification_summary, g_free);
++ g_clear_pointer (&that->m_notification_body, g_free);
++
++ value = g_value_array_get_nth (params, 0);
++ if (value == NULL) {
++ goto out;
++ }
++
++ if (G_VALUE_HOLDS_STRING (value)) {
++ option = g_value_dup_string (value);
++ } else if (G_VALUE_HOLDS_POINTER (value)) {
++ option = that->ucs4_to_utf8 ((const guchar *)g_value_get_pointer (value));
++ } else {
++ goto out;
++ }
++
++ if (g_strcmp0 (option, "notify") != 0) {
++ goto out;
++ }
++
++ value = g_value_array_get_nth (params, 1);
++ if (value == NULL) {
++ goto out;
++ }
++
++ if (G_VALUE_HOLDS_STRING (value)) {
++ str = g_value_dup_string (value);
++ } else if (G_VALUE_HOLDS_POINTER (value)) {
++ str = that->ucs4_to_utf8 ((const guchar *)g_value_get_pointer (value));
++ } else {
++ goto out;
++ }
++
++ g_utf8_validate (str, strlen (str), &end);
++ validated = g_strndup (str, end - str);
++
++ /* No control characters allowed. */
++ for (p = validated; *p != '\0'; p++) {
++ if ((*p & 0x1f) == *p) {
++ *p = ' ';
++ }
++ }
++
++ that->m_notification_summary = validated;
++ g_free (str);
++
++ that->m_notification_received = TRUE;
++ if (params->n_values == 2) {
++ goto out;
++ }
++
++ value = g_value_array_get_nth (params, 2);
++ if (value == NULL) {
++ goto out;
++ }
++
++ if (G_VALUE_HOLDS_STRING (value)) {
++ str = g_value_dup_string (value);
++ } else if (G_VALUE_HOLDS_POINTER (value)) {
++ str = that->ucs4_to_utf8 ((const guchar *)g_value_get_pointer (value));
++ } else {
++ goto out;
++ }
++
++ g_utf8_validate (str, strlen (str), &end);
++ validated = g_strndup (str, end - str);
++
++ /* No control characters allowed. */
++ for (p = validated; *p != '\0'; p++) {
++ if ((*p & 0x1f) == *p) {
++ *p = ' ';
++ }
++ }
++
++ that->m_notification_body = validated;
++ g_free (str);
++
++ out:
++ g_free (option);
++}
++
+ /* Send secondary device attributes. */
+ static void
+ vte_sequence_handler_send_secondary_device_attributes (VteTerminalPrivate *that, GValueArray *params)
+
+From 47354b001a136fd4bb74eb666c898aacd3dcb991 Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir@gnome.org>
+Date: Thu, 29 Jan 2015 13:09:17 +0100
+Subject: [PATCH 2/5] vte.sh: Emit OSC 777 from PROMPT_COMMAND
+
+https://bugzilla.gnome.org/show_bug.cgi?id=711059
+---
+ src/vte.sh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/vte.sh b/src/vte.sh
+index 2d211caa..1c0543bd 100644
+--- a/src/vte.sh
++++ b/src/vte.sh
+@@ -50,9 +50,11 @@ __vte_osc7 () {
+ }
+
+ __vte_prompt_command() {
++ local command=$(HISTTIMEFORMAT= history 1 | sed 's/^ *[0-9]\+ *//')
++ command="${command//;/ }"
+ local pwd='~'
+ [ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/}
+- printf "\033]0;%s@%s:%s\007%s" "${USER}" "${HOSTNAME%%.*}" "${pwd}" "$(__vte_osc7)"
++ printf "\033]777;notify;Command completed;%s\007\033]0;%s@%s:%s\007%s" "${command}" "${USER}" "${HOSTNAME%%.*}" "${pwd}" "$(__vte_osc7)"
+ }
+
+ case "$TERM" in
+
+From 3110796ee43bff7251026fa2972907b9f9ae4d33 Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir@gnome.org>
+Date: Thu, 22 Jan 2015 16:37:10 +0100
+Subject: [PATCH 3/5] vteapp: Add a test for the notification-received signal
+
+---
+ bindings/vala/app.vala | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/bindings/vala/app.vala b/bindings/vala/app.vala
+index 58698f92..464a02a0 100644
+--- a/bindings/vala/app.vala
++++ b/bindings/vala/app.vala
+@@ -309,6 +309,8 @@ class Window : Gtk.ApplicationWindow
+ if (App.Options.object_notifications)
+ terminal.notify.connect(notify_cb);
+
++ terminal.notification_received.connect(notification_received_cb);
++
+ /* Settings */
+ if (App.Options.no_double_buffer)
+ terminal.set_double_buffered(false);
+@@ -772,6 +774,11 @@ class Window : Gtk.ApplicationWindow
+ set_title(terminal.get_window_title());
+ }
+
++ private void notification_received_cb(Vte.Terminal terminal, string summary, string? body)
++ {
++ print ("[%s]: %s\n", summary, body);
++ }
++
+ } /* class Window */
+
+ class App : Gtk.Application
+
+From ad3763c5fa04ab03f00739e59e3598376d85ebea Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir@gnome.org>
+Date: Fri, 13 May 2016 17:53:54 +0200
+Subject: [PATCH 4/5] Add a property to configure the scroll speed
+
+By default, it is set to zero which gives the current behaviour of
+moving the buffer by a function of the number of visible rows.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1103380
+---
+ doc/reference/vte-sections.txt | 1 +
+ src/vte.cc | 19 +++++++++++++++++-
+ src/vte/vteterminal.h | 4 ++++
+ src/vtegtk.cc | 45 ++++++++++++++++++++++++++++++++++++++++++
+ src/vtegtk.hh | 1 +
+ src/vteinternal.hh | 2 ++
+ 6 files changed, 71 insertions(+), 1 deletion(-)
+
+diff --git a/doc/reference/vte-sections.txt b/doc/reference/vte-sections.txt
+index d4bedb16..ba36b6f2 100644
+--- a/doc/reference/vte-sections.txt
++++ b/doc/reference/vte-sections.txt
+@@ -41,6 +41,7 @@ vte_terminal_set_cursor_shape
+ vte_terminal_get_cursor_shape
+ vte_terminal_get_cursor_blink_mode
+ vte_terminal_set_cursor_blink_mode
++vte_terminal_set_scroll_speed
+ vte_terminal_set_scrollback_lines
+ vte_terminal_set_font
+ vte_terminal_get_font
+diff --git a/src/vte.cc b/src/vte.cc
+index a162c3f5..03a5f941 100644
+--- a/src/vte.cc
++++ b/src/vte.cc
+@@ -9634,6 +9634,7 @@ void
+ VteTerminalPrivate::widget_scroll(GdkEventScroll *event)
+ {
+ gdouble delta_x, delta_y;
++ gdouble scroll_speed;
+ gdouble v;
+ gint cnt, i;
+ int button;
+@@ -9687,7 +9688,13 @@ VteTerminalPrivate::widget_scroll(GdkEventScroll *event)
+ return;
+ }
+
+- v = MAX (1., ceil (gtk_adjustment_get_page_increment (m_vadjustment) / 10.));
++ if (m_scroll_speed == 0) {
++ scroll_speed = ceil (gtk_adjustment_get_page_increment (m_vadjustment) / 10.);
++ } else {
++ scroll_speed = m_scroll_speed;
++ }
++
++ v = MAX (1., scroll_speed);
+ _vte_debug_print(VTE_DEBUG_EVENTS,
+ "Scroll speed is %d lines per non-smooth scroll unit\n",
+ (int) v);
+@@ -9903,6 +9910,16 @@ VteTerminalPrivate::decscusr_cursor_shape()
+ }
+ }
+
++bool
++VteTerminalPrivate::set_scroll_speed(unsigned int scroll_speed)
++{
++ if (scroll_speed == m_scroll_speed)
++ return false;
++
++ m_scroll_speed = scroll_speed;
++ return true;
++}
++
+ bool
+ VteTerminalPrivate::set_scrollback_lines(long lines)
+ {
+diff --git a/src/vte/vteterminal.h b/src/vte/vteterminal.h
+index 9ab32aef..e83502a8 100644
+--- a/src/vte/vteterminal.h
++++ b/src/vte/vteterminal.h
+@@ -274,6 +274,10 @@ void vte_terminal_set_cursor_shape(VteTerminal *terminal,
+ _VTE_PUBLIC
+ VteCursorShape vte_terminal_get_cursor_shape(VteTerminal *terminal) _VTE_GNUC_NONNULL(1);
+
++_VTE_PUBLIC
++void vte_terminal_set_scroll_speed(VteTerminal *terminal,
++ guint scroll_speed) _VTE_GNUC_NONNULL(1);
++
+ /* Set the number of scrollback lines, above or at an internal minimum. */
+ _VTE_PUBLIC
+ void vte_terminal_set_scrollback_lines(VteTerminal *terminal,
+diff --git a/src/vtegtk.cc b/src/vtegtk.cc
+index 81d943e2..37fea74e 100644
+--- a/src/vtegtk.cc
++++ b/src/vtegtk.cc
+@@ -475,6 +475,9 @@ vte_terminal_get_property (GObject *object,
+ case PROP_REWRAP_ON_RESIZE:
+ g_value_set_boolean (value, vte_terminal_get_rewrap_on_resize (terminal));
+ break;
++ case PROP_SCROLL_SPEED:
++ g_value_set_uint (value, impl->m_scroll_speed);
++ break;
+ case PROP_SCROLLBACK_LINES:
+ g_value_set_uint (value, impl->m_scrollback_lines);
+ break;
+@@ -561,6 +564,9 @@ vte_terminal_set_property (GObject *object,
+ case PROP_REWRAP_ON_RESIZE:
+ vte_terminal_set_rewrap_on_resize (terminal, g_value_get_boolean (value));
+ break;
++ case PROP_SCROLL_SPEED:
++ vte_terminal_set_scroll_speed (terminal, g_value_get_uint (value));
++ break;
+ case PROP_SCROLLBACK_LINES:
+ vte_terminal_set_scrollback_lines (terminal, g_value_get_uint (value));
+ break;
+@@ -1417,6 +1423,21 @@ vte_terminal_class_init(VteTerminalClass *klass)
+ TRUE,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY));
+
++ /**
++ * VteTerminal:scroll-speed:
++ *
++ * The number of lines by which the buffer is moved when
++ * scrolling with a mouse wheel on top of the terminal
++ * Setting it to zero will cause the buffer to be moved by an
++ * amount depending on the number of visible rows the widget
++ * can display.
++ */
++ pspecs[PROP_SCROLL_SPEED] =
++ g_param_spec_uint ("scroll-speed", NULL, NULL,
++ 0, G_MAXUINT,
++ 0,
++ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY));
++
+ /**
+ * VteTerminal:scrollback-lines:
+ *
+@@ -3651,6 +3672,30 @@ vte_terminal_get_row_count(VteTerminal *terminal)
+ return IMPL(terminal)->m_row_count;
+ }
+
++/**
++ * vte_terminal_set_scroll_speed:
++ * @terminal: a #VteTerminal
++ * @scroll_speed: move the buffer by this number of lines while scrolling
++ *
++ * Sets the number of lines by which the buffer is moved when
++ * scrolling with a mouse wheel. Setting it to zero will cause the
++ * buffer to be moved by an amount depending on the number of visible
++ * rows the widget can display.
++ */
++void
++vte_terminal_set_scroll_speed(VteTerminal *terminal, guint scroll_speed)
++{
++ g_return_if_fail(VTE_IS_TERMINAL(terminal));
++
++ GObject *object = G_OBJECT(terminal);
++ g_object_freeze_notify(object);
++
++ if (IMPL(terminal)->set_scroll_speed(scroll_speed))
++ g_object_notify_by_pspec(object, pspecs[PROP_SCROLL_SPEED]);
++
++ g_object_thaw_notify(object);
++}
++
+ /**
+ * vte_terminal_set_scrollback_lines:
+ * @terminal: a #VteTerminal
+diff --git a/src/vtegtk.hh b/src/vtegtk.hh
+index f8a83525..98c616f5 100644
+--- a/src/vtegtk.hh
++++ b/src/vtegtk.hh
+@@ -80,6 +80,7 @@ enum {
+ PROP_MOUSE_POINTER_AUTOHIDE,
+ PROP_PTY,
+ PROP_REWRAP_ON_RESIZE,
++ PROP_SCROLL_SPEED,
+ PROP_SCROLLBACK_LINES,
+ PROP_SCROLL_ON_KEYSTROKE,
+ PROP_SCROLL_ON_OUTPUT,
+diff --git a/src/vteinternal.hh b/src/vteinternal.hh
+index e5fba41d..613a8b80 100644
+--- a/src/vteinternal.hh
++++ b/src/vteinternal.hh
+@@ -387,6 +387,7 @@ public:
+ gboolean m_scroll_on_output;
+ gboolean m_scroll_on_keystroke;
+ gboolean m_alternate_screen_scroll;
++ guint m_scroll_speed;
+ vte::grid::row_t m_scrollback_lines;
+
+ /* Restricted scrolling */
+@@ -1111,6 +1112,7 @@ public:
+ bool set_mouse_autohide(bool autohide);
+ bool set_pty(VtePty *pty);
+ bool set_rewrap_on_resize(bool rewrap);
++ bool set_scroll_speed(unsigned int scroll_speed);
+ bool set_scrollback_lines(long lines);
+ bool set_scroll_on_keystroke(bool scroll);
+ bool set_scroll_on_output(bool scroll);
+
+From 832087ffc1fc032039bd5c7396679e570ae487bf Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir@gnome.org>
+Date: Fri, 13 May 2016 17:54:57 +0200
+Subject: [PATCH 5/5] vteapp: Add a test for the scroll-speed property
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1103380
+---
+ bindings/vala/app.vala | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/bindings/vala/app.vala b/bindings/vala/app.vala
+index 464a02a0..31b10aef 100644
+--- a/bindings/vala/app.vala
++++ b/bindings/vala/app.vala
+@@ -334,6 +334,7 @@ class Window : Gtk.ApplicationWindow
+ terminal.set_rewrap_on_resize(!App.Options.no_rewrap);
+ terminal.set_scroll_on_output(false);
+ terminal.set_scroll_on_keystroke(true);
++ terminal.set_scroll_speed(App.Options.scroll_speed);
+ terminal.set_scrollback_lines(App.Options.scrollback_lines);
+
+ /* Style */
+@@ -847,6 +848,7 @@ class App : Gtk.Application
+ public static bool object_notifications = false;
+ public static string? output_filename = null;
+ public static bool reverse = false;
++ public static uint scroll_speed = 0;
+ public static int scrollback_lines = 512;
+ public static int transparency_percent = 0;
+ public static bool version = false;
+@@ -1038,6 +1040,8 @@ class App : Gtk.Application
+ "Save terminal contents to file at exit", null },
+ { "reverse", 0, 0, OptionArg.NONE, ref reverse,
+ "Reverse foreground/background colors", null },
++ { "scroll-speed", 0, 0, OptionArg.INT, ref scroll_speed,
++ "Specify the scroll speed", null },
+ { "scrollback-lines", 'n', 0, OptionArg.INT, ref scrollback_lines,
+ "Specify the number of scrollback-lines", null },
+ { "transparent", 'T', 0, OptionArg.INT, ref transparency_percent,
diff --git a/x11-libs/vte/vte-0.50.4.ebuild b/x11-libs/vte/vte-0.50.4.ebuild
new file mode 100644
index 00000000000..205d5ede280
--- /dev/null
+++ b/x11-libs/vte/vte-0.50.4.ebuild
@@ -0,0 +1,90 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="6"
+VALA_USE_DEPEND="vapigen"
+VALA_MIN_API_VERSION="0.32"
+
+inherit gnome2 vala
+
+DESCRIPTION="Library providing a virtual terminal emulator widget"
+HOMEPAGE="https://wiki.gnome.org/action/show/Apps/Terminal/VTE"
+
+LICENSE="LGPL-2+"
+SLOT="2.91"
+IUSE="+crypt debug glade +introspection vala vanilla"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd ~amd64-linux ~arm-linux ~x86-linux ~x64-solaris ~x86-solaris"
+REQUIRED_USE="vala? ( introspection )"
+
+SRC_URI="${SRC_URI}"
+
+RDEPEND="
+ >=dev-libs/glib-2.40:2
+ >=dev-libs/libpcre2-10.21
+ >=x11-libs/gtk+-3.16:3[introspection?]
+ >=x11-libs/pango-1.22.0
+
+ sys-libs/ncurses:0=
+ sys-libs/zlib
+
+ crypt? ( >=net-libs/gnutls-3.2.7:0= )
+ glade? ( >=dev-util/glade-3.9:3.10 )
+ introspection? ( >=dev-libs/gobject-introspection-0.9.0:= )
+"
+DEPEND="${RDEPEND}
+ dev-util/gperf
+ dev-libs/libxml2
+ >=dev-util/gtk-doc-am-1.13
+ >=dev-util/intltool-0.35
+ sys-devel/gettext
+ virtual/pkgconfig
+
+ vala? ( $(vala_depend) )
+"
+RDEPEND="${RDEPEND}
+ !x11-libs/vte:2.90[glade]
+"
+
+src_prepare() {
+ if ! use vanilla; then
+ # First half of http://pkgs.fedoraproject.org/cgit/rpms/vte291.git/tree/vte291-command-notify-scroll-speed.patch
+ # Adds OSC 777 support for desktop notifications in gnome-terminal or elsewhere
+ eapply "${FILESDIR}"/${P}-command-notify.patch
+ fi
+
+ use vala && vala_src_prepare
+
+ # build fails because of -Werror with gcc-5.x
+ sed -e 's#-Werror=format=2#-Wformat=2#' -i configure || die "sed failed"
+
+ gnome2_src_prepare
+}
+
+src_configure() {
+ local myconf=""
+
+ if [[ ${CHOST} == *-interix* ]]; then
+ myconf="${myconf} --disable-Bsymbolic"
+
+ # interix stropts.h is empty...
+ export ac_cv_header_stropts_h=no
+ fi
+
+ # Python bindings are via gobject-introspection
+ # Ex: from gi.repository import Vte
+ gnome2_src_configure \
+ --disable-test-application \
+ --disable-static \
+ --with-gtk=3.0 \
+ $(use_enable debug) \
+ $(use_enable glade glade-catalogue) \
+ $(use_with crypt gnutls) \
+ $(use_enable introspection) \
+ $(use_enable vala) \
+ ${myconf}
+}
+
+src_install() {
+ gnome2_src_install
+ mv "${ED}"/etc/profile.d/vte{,-${SLOT}}.sh || die
+}