Hallo,
* Emilio Pozuelo Monfort [Mon, Mar 20 2017, 10:48:07PM]:

> >>> if you think that #857562 and #852282 are serious bugs, you need to 
> >>> convince
> >>> the maintainer that this is the case. Failing this, you can try to 
> >>> convince 
> >>> the release team, failing this, you can try the CTTE.
> >>
> >> CTTE does not have the power to overrule decisions by DPL delegates,
> >> this would require a GR.
> >>
> >>> Filing a "please package new upstream version" bug and making this bug 
> >>> serious
> >>> is *NOT* the right way to do this. Seriously.
> >>>
> >>> Please also note that the changes with this new upstream version are not
> >>> exactly trivial… (and the patch you attached to this bug only included the
> >>> Debian packaging changes, but not the upstream changes…)
> > 
> > And because I think that maintainer is MIA and this is the root of all
> > this trouble, I will wait a couple of days and then go for conventional
> > highjacking of this package.
> 
> Please don't.
> 
> I think you are overreacting.
> 
> Upgrading to a new upstream version may not be suitable for stretch at this
> stage (I'd need to look at the actual changes there), and you never replied to
> my questions in #852282, so I couldn't try to reproduce, fix or forward that 
> bug.

I don't think I am overreacting, not much. Let's check the facts:

* I report a bug
* I don't get any response, for weeks (yeah, questions were sent only to BTS, 
NOT TO THE SUBMITTER)
* Next time I get fed up with this issue, I check around, see another person 
having responded to this bug already so this is probably a sufficient answer.
* I also search the upstream BTS and find the ticket within a minute.
* I post the reference to the upstream report, where even more people are 
commenting. Heck, upstream ticket existed even BEFORE you sent the response to 
#852282 .
* Upstream releases a fixed version soon after
* Again, NOTHING happens for weeks in Debian. And we are close to release. Now 
let's talk about about overreacting again...

IMHO checking upstream BTS is the very least thing to expect from a
maintainer who rolls own releases (i.e. if you skip upstream QA work,
you get this extra burden).

> Also if you can identify which upstream commit fixes #857562 that would help. 
> If
> the new version is not fine, we can still do targeted fixes.

To be honest, that one I could not reproduce with the Sid version now so
I would withdraw that changelog. I asked the submitter for more
information a couple of minutes ago.

> I'll look at the new version this week anyway.

I added a diff for review. It's slightly purified (skipped the
translations).

Best Regards,
Eduard.
diff -Nurd /tmp/terminator-1.90+bzr-1705/ChangeLog terminator-1.91/ChangeLog
--- /tmp/terminator-1.90+bzr-1705/ChangeLog	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/ChangeLog	2017-02-26 18:45:29.000000000 +0100
@@ -1,3 +1,108 @@
+terminator 1.91:
+  Features
+    * None
+
+  Enhancements
+    * Update and fixes for the generic terminator.spec file used by
+      downstreams for RPM generation
+    * Allow the use of larger separator sizes (Egmont Koblinger,
+      LP#1522575)
+    * Add the gruvbox light/dark palettes as themes.
+    * Updated the preferences window to a modern version of glade.
+      Better spacing, layout etc.
+    * Fix the background transparency, also allowing per theme
+      CSS fixes and styling tweaks. (LP#1599453)
+    * Enable the use of the hyper key as a modifier in shortcuts.
+      (Steven Keuchel, LP#1362229)
+    * Displays confirmation dialog when a single term is
+      zoomed/maximised (minoru/shiraeeshi, LP#1531933)
+    * Add keywords entry to the desktop file (Julián Moreno Patiño,
+      LP#1241052)
+    * Add subtrees to custom commands menu - just add '/' to split
+      (LP#1631759)
+    * Normalise display name when creating DBus name (Andrea
+      Corbellini, LP#1267195)
+    * Remove auto-capitalisation of profiles in menu and add sorting
+      (LP#1521301)
+
+  Bug Fixes
+    * Fix missing dependencies in debian/control (LP#1644155,
+      LP#1644560)
+    * Fix terminator not working with default python3 by forcing
+      python2 (LP#1621156)
+    * Update some places where the old homepage was still mentioned.
+      (LP#1644659)
+    * Fix the regression of the initial scrollbar state not being
+      set (LP#1645704)
+    * Fix using ~ (home dir) over DBus (LP#1646034)
+    * Fix the middle mouse button not getting passed to tmux.
+      (LP#1647507)
+    * Fix oversized splitter bar hover area for Adwaita and any other
+      theme that does this. (LP#1647292)
+    * Fix some strange behaviour when clicking on the trough of a
+      scale (i.e. stepping) The previous value gets read, not the
+      current.
+    * Fix the GtkDialog mapped without a transient parent message
+      (Egmont Koblinger, LP#1518066)
+    * Fix a couple of other transient parent errors.
+    * At least /try/ to include all the theme specific css files in
+      setup.py.
+    * Fix cwd for new windows on FreeBSD (Eric Badger, LP#1650306)
+    * Fix terminal shot plugin to work with GTK3 (Vineeth Raj)
+    * Fix the logger plugin (Eric Badger, LP#1652143)
+    * Fix system fonts to pull values from dconf, not gconf
+      (LP#1655446)
+    * Fix translation strings that could cause problems for some
+      languages (LQ#408095)
+    * Fix separators in popup menus on newer Gtk/Adwaita (Erika,
+      LP#1656524)
+    * Fix searchbar not looking prior to the configured lines when
+      using infinite scrollback (Eric Johnson, LP#1471369)
+    * Fix '0xffff' in keybindings prefs when a binding is previously
+      set to Disabled
+    * Update embedded css selectors to also be GTK 3.20+ compatible
+      using nodes (Iain Lane)
+    * Fix focus/z-order issue introduced by gtk3 port (Saber
+      Rastikerdar, LP#805870)
+    * Fix for old windows popping to the front when new windows are
+      opened
+    * Fix scrollwheel actions on the tabs not working anymore
+      (LP#1647287)
+    * Fix incorrect sizing of sub windows when there's no titlebar
+      (Emilio Pozuelo Monfort, LP#1646257)
+    * Reapplication of select on copy fix that didn't get applied
+      to gtk3 (LP#1652931)
+    * Fix for getting two different resizes of the terminal which
+      vim wasn't handling well (LP#1646293)
+    * Fix the cwd of a second instance launched by exo-open/Thunar
+      (LP#1646034)
+    * Fix an exception with an unexpected keyword getting passed
+      to set_cursor
+    * Fix the version introspection capture by exception
+      (Emilio Pozuelo Monfort, LP#1574399)
+    * Fix to stop panes nudging on performing a normal split due to
+      the ratio float not accounting for the handle size
+    * Fix vte object not being released properly, and holding open
+      hidden /tmp files (LP#785501, LP#1645500)
+    * Fix versions of Gtk where some CSS pseudo elements are not
+      parsed and application will not load. Note that entire file is
+      then ignored (LP#1663669)
+    * Fix/bodge for strange race condition where every so often
+      get_length returns 1 (LP#1655027)
+    * Fix remotinator get_tab_title for tabs with more than a single
+      terminal (Nix, LP#1579445)
+    * Fix custom_command and always_split_with_profile to work
+      together (Nix, LP#1600609)
+    * Fix regex's needing MULTILINE flag to prevent libvte 0.44
+      throwing warnings (LP#1560989)
+    * Fix an invalid call to get_child() rather than the correct
+      get_children()[0] for a window
+    * Fix patterns for url matching to handle IPv6 as host
+      (LP#1519265)
+    * Fix exception when adding new profile in prefs (LP#1521301)
+    * Fix new windows opening in the background (note that some will
+      think this is bad) (LP#1646437)
+
 terminator 1.90:
   Features
     * Layout launcher with option or shortcut (Steve Boddy)
diff -Nurd /tmp/terminator-1.90+bzr-1705/PKG-INFO terminator-1.91/PKG-INFO
--- /tmp/terminator-1.90+bzr-1705/PKG-INFO	1970-01-01 01:00:00.000000000 +0100
+++ terminator-1.91/PKG-INFO	2017-02-28 23:10:08.000000000 +0100
@@ -0,0 +1,10 @@
+Metadata-Version: 1.0
+Name: terminator
+Version: 1.91
+Summary: Terminator, the robot future of terminals
+Home-page: https://gnometerminator.blogspot.com/p/introduction.html
+Author: Chris Jones
+Author-email: c...@tenshu.net
+License: GNU GPL v2
+Description: UNKNOWN
+Platform: UNKNOWN
diff -Nurd /tmp/terminator-1.90+bzr-1705/RELEASING terminator-1.91/RELEASING
--- /tmp/terminator-1.90+bzr-1705/RELEASING	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/RELEASING	1970-01-01 01:00:00.000000000 +0100
@@ -1,40 +0,0 @@
-Here are the steps to follow to create a new terminator release:
-
-1.  Ensure there are no local, uncommitted/unpushed modifications.
-
-    $ bzr status
-
-2.  Verify the code passes checks and tests
-
-    $ python setup.py test
-    $ python setup.py check
-
-3.  Update version number.  Edit terminatorlib/version.py and set the
-    version number.  Also edit terminator.spec and set it there. Edit
-    the debian/changelog to add new version.
-
-4.  Create the source distribution package
-
-    $ python setup.py sdist
-
-5.  Sign the tarball
-
-    $ gpg -u br...@bryceharrington.org --armor --output
-      terminator-0.98.tar.gz.asc --detach-sig terminator-0.98.tar.gz
-
-6.  Upload to Launchpad
-
-    + Create the appropriate Milestone
-    + Create a matching Release
-    + Upload the tarball and gpg signature to the Release
-
-7.  Tag the release in trunk
-
-    $ bzr tag 0.98
-    $ bzr push
-
-8.  Post announcements
-
-    + Write a blog post
-    + Create an Announcement on the Launchpad page.
-      Include a link to the blog post URL
diff -Nurd /tmp/terminator-1.90+bzr-1705/data/terminator.desktop terminator-1.91/data/terminator.desktop
--- /tmp/terminator-1.90+bzr-1705/data/terminator.desktop	1970-01-01 01:00:00.000000000 +0100
+++ terminator-1.91/data/terminator.desktop	2017-03-21 19:51:28.806213015 +0100
@@ -0,0 +1,153 @@
+[Desktop Entry]
+Name=Terminator
+Name[af]=Terminator
+Name[ar]=المتطرف
+Name[ast]=Terminator
+Name[az]=Terminator
+Name[be]=Тэрмінатар
+Name[bg]=Терминатор
+Name[bn]=টার্মিনেটর
+Name[bs]=Terminator
+Name[ca]=Terminator
+Name[ca@valencia]=Terminator
+Name[cs]=Terminator
+Name[da]=Terminator
+Name[de]=Terminator
+Name[el]=Terminator
+Name[en_AU]=Terminator
+Name[en_CA]=Terminator
+Name[en_GB]=Terminator
+Name[eo]=Terminatoro
+Name[es]=Terminator
+Name[et]=Terminator
+Name[eu]=Terminator
+Name[fa]=ترمیناتور
+Name[fi]=Terminator
+Name[fo]=Terminator
+Name[fr]=Terminator
+Name[gl]=Terminador
+Name[he]=Terminator
+Name[hi]=टर्मिनेटर
+Name[hr]=Terminator
+Name[hu]=Terminator
+Name[hy]=Terminator
+Name[ia]=Terminator
+Name[id]=Terminator
+Name[is]=Terminator
+Name[it]=Terminator
+Name[ja]=Terminator
+Name[jv]=Terminator
+Name[ka]=Terminator
+Name[kk]=Терминатор
+Name[ko]=터미네이터
+Name[lt]=Terminator
+Name[lv]=Terminator
+Name[mk]=Терминатор
+Name[ml]=ടെര്‍മിനേറ്റര്‍
+Name[ms]=Terminator
+Name[nb]=Terminator
+Name[nl]=Terminator
+Name[oc]=Terminator
+Name[pl]=Terminator
+Name[pt]=Terminator
+Name[pt_BR]=Terminator
+Name[ro]=Terminator
+Name[ru]=Terminator
+Name[ru_RU]=Терминатор
+Name[si]=ටර්මිනේටර්
+Name[sk]=Terminátor
+Name[sl]=Terminator
+Name[sq]=Terminator
+Name[sr]=Терминатор
+Name[su]=Terminator
+Name[sv]=Terminator
+Name[ta]=முனையம்
+Name[te]=టెర్మినేటర్
+Name[th]=Terminator
+Name[tr]=Uçbirim
+Name[uk]=Terminator
+Name[ur]=Terminator
+Name[vi]=Terminator
+Name[zh_CN]=Terminator 终端终结者
+Name[zh_TW]=終端機
+Comment=Multiple terminals in one window
+Comment[af]=Veelvuldige terminale in een venster
+Comment[ar]=العديد من الطرفيات في نافذة واحدة
+Comment[ast]=Delles terminales nuna ventana
+Comment[az]=Çoxsaylı terminallar bir pəncərədə
+Comment[be]=Некалькі тэрміналаў у акне
+Comment[bg]=Множество терминали в един прозорец
+Comment[bn]=এক উইন্ডোতে একাধিক টার্মিনাল
+Comment[bs]=Više terminala u jednom prozoru
+Comment[ca]=Diversos terminals en una finestra
+Comment[ca@valencia]=Diversos terminals en una finestra
+Comment[cs]=Několik terminálů v jednom okně
+Comment[da]=Flere terminaler i et vindue
+Comment[de]=Mehrere Terminals in einem Fenster
+Comment[el]=Πολλαπλά τερματικά σε ένα παράθυρο
+Comment[en_AU]=Multiple terminals in one window
+Comment[en_CA]=Multiple terminals in one window
+Comment[en_GB]=Multiple terminals in one window
+Comment[eo]=Pluraj terminaloj en unu fenestro
+Comment[es]=Múltiples terminales en una ventana
+Comment[et]=Mitu terminaali ühes aknas
+Comment[eu]=Hainbat terminal leiho bakarrean
+Comment[fi]=Useita päätteitä yhdessä ikkunassa
+Comment[fr]=Permet d'avoir plusieurs terminaux en une seule fenêtre
+Comment[gl]=Múltiples terminales nunha ventá
+Comment[he]=מסופים מרובים בחלון אחד
+Comment[hi]=एक विंडो में अनेक  टर्मिनल
+Comment[hr]=Više terminala u jednom prozoru
+Comment[hu]=Több terminál egy ablakban
+Comment[hy]=Մի քանի տերմինալ մեկ պատուհանում
+Comment[ia]=Plure terminales in un fenestra
+Comment[id]=Banyak terminal dalam satu window
+Comment[is]=Margar útstöðvar í einum glugga
+Comment[it]=Molteplici terminali un una sola finestra
+Comment[ja]=複数の端末を一つのウインドウに
+Comment[jv]=Akeh terminal ning sak jendelo
+Comment[ka]=მრავალი ტერმინალები ერთ ფანჯარაში
+Comment[kk]=Бір терезе ішінде көптік терминалдар
+Comment[ko]=창 하나에 터미널 여러 개 쓰기
+Comment[lt]=Keli terminalai viename lange
+Comment[lv]=Daudzi termināļi vienā logā
+Comment[mk]=Повеќе терминали во еден прозорец
+Comment[ml]=ഒരു ജാലകത്തില്‍ ഒന്നിലധികം ടെര്‍മിനലുകള്‍
+Comment[ms]=Kesemua terminal dalam satu tetingkap
+Comment[nb]=Flere terminaler i ett vindu
+Comment[nl]=Meerdere terminals in één venster
+Comment[oc]=Permet d'aver mantun terminal dins una sola fenèstra
+Comment[pl]=Wiele terminali w jednym oknie
+Comment[pt]=Terminais múltiplos numa janela
+Comment[pt_BR]=Múltiplos terminais em uma janela
+Comment[ro]=Terminale multiple într-o singură fereastră
+Comment[ru]=Несколько терминалов в одном окне
+Comment[si]=එක් වින්ඩෝවක ටර්මිනල් රාශියක්
+Comment[sk]=Viaceré terminály v jednom okne
+Comment[sl]=Več terminalov v enem oknu
+Comment[sq]=Shumë terminale në një dritare
+Comment[sr]=Више терминала у једном прозору
+Comment[su]=Loba terminal dina hiji jandela
+Comment[sv]=Flera terminaler i ett fönster
+Comment[ta]=ஒரு  சாளரத்தில் பல முனையங்கள்
+Comment[te]=ఒకే విండోలో బహుళ టెర్మినల్స్
+Comment[th]=หลายเทอร์มินัลในหน้าต่างเดียว
+Comment[tr]=Tek pencerede birden çok uçbirim
+Comment[uk]=Кілька терміналів в одному вікні
+Comment[ur]=ایک دریچے میں ایک سے زیادہ ٹرمنل
+Comment[vi]=Mở nhiều terminal trong cùng cửa sổ
+Comment[zh_CN]=一个窗口中的多个终端
+TryExec=terminator
+Exec=terminator
+Icon=terminator
+Type=Application
+Categories=GNOME;GTK;Utility;TerminalEmulator;System;
+StartupNotify=true
+X-Ubuntu-Gettext-Domain=terminator
+X-Ayatana-Desktop-Shortcuts=NewWindow;
+Keywords=terminal;shell;prompt;command;commandline;
+[NewWindow Shortcut Group]
+Name=Open a New Window
+Exec=terminator
+TargetEnvironment=Unity
+
diff -Nurd /tmp/terminator-1.90+bzr-1705/data/terminator.desktop.in terminator-1.91/data/terminator.desktop.in
--- /tmp/terminator-1.90+bzr-1705/data/terminator.desktop.in	2017-03-21 19:50:28.000000000 +0100
+++ terminator-1.91/data/terminator.desktop.in	2017-02-26 18:45:29.000000000 +0100
@@ -14,3 +14,4 @@
 Name=Open a New Window
 Exec=terminator
 TargetEnvironment=Unity
+
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/README.source terminator-1.91/debian/README.source
--- /tmp/terminator-1.90+bzr-1705/debian/README.source	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/debian/README.source	1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-This package uses CDBS simple patchsys. dpkg-source -x does produce source
-ready for building with dpkg-buildpackage. It does not procude source ready
-for editing. To edit or update a patch, use cdbs-edit-patch.
-See cdbs-edit-patch(1) manual page for details.
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/changelog terminator-1.91/debian/changelog
--- /tmp/terminator-1.90+bzr-1705/debian/changelog	2017-01-26 17:38:15.000000000 +0100
+++ terminator-1.91/debian/changelog	2017-03-19 11:18:58.483002000 +0100
@@ -1,3 +1,14 @@
+terminator (1.91-0.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * New upstream version
+    + opening in folder works with thunar (closes: #857562)
+    + crazy new window handling fixed (closes: #852282, LP: #1646437)
+  * dropped Debian patches applied upstream (add-keywords-entry.diff,
+    gi-require-exception.diff, subwindows-zero-size.patch)
+
+ -- Eduard Bloch <bl...@debian.org>  Sun, 19 Mar 2017 11:12:18 +0100
+
 terminator (1.90+bzr-1705-1) unstable; urgency=medium
 
   * New upstream snapshot.
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/patches/add-keywords-entry.diff terminator-1.91/debian/patches/add-keywords-entry.diff
--- /tmp/terminator-1.90+bzr-1705/debian/patches/add-keywords-entry.diff	2013-10-17 22:19:18.000000000 +0200
+++ terminator-1.91/debian/patches/add-keywords-entry.diff	1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-Description: Add Keywords entry to the desktop file.
-Forwarded: https://bugs.launchpad.net/bugs/1241052
-Author: Julián Moreno Patiño <jul...@debian.org>
-Last-Update: 2013-10-17
---- a/data/terminator.desktop.in
-+++ b/data/terminator.desktop.in
-@@ -9,8 +9,8 @@
- StartupNotify=true
- X-Ubuntu-Gettext-Domain=terminator
- X-Ayatana-Desktop-Shortcuts=NewWindow;
-+Keywords=terminal;shell;prompt;command;commandline;
- [NewWindow Shortcut Group]
- Name=Open a New Window
- Exec=terminator
- TargetEnvironment=Unity
--
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/patches/gi-require-exception.diff terminator-1.91/debian/patches/gi-require-exception.diff
--- /tmp/terminator-1.90+bzr-1705/debian/patches/gi-require-exception.diff	2017-01-26 17:30:21.000000000 +0100
+++ terminator-1.91/debian/patches/gi-require-exception.diff	1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-Author: Emilio Pozuelo Monfort <po...@debian.org>
-Bug: https://bugs.launchpad.net/terminator/+bug/1574399
-Description: catch all exceptions
-
-As gi.require_version throws ValueErrors
-
---- a/terminatorlib/window.py
-+++ b/terminatorlib/window.py
-@@ -23,7 +23,7 @@
-         gi.require_version('Keybinder', '3.0')
-         from gi.repository import Keybinder
-         Keybinder.init()
--    except ImportError:
-+    except:
-         err('Warning: python-keybinder is not installed. This means the \
- hide_window shortcut will be unavailable')
- 
---- a/terminatorlib/plugins/activitywatch.py
-+++ b/terminatorlib/plugins/activitywatch.py
-@@ -21,7 +21,7 @@
-     # This is inside this try so we only make the plugin available if pynotify
-     #  is present on this computer.
-     AVAILABLE = ['ActivityWatch', 'InactivityWatch']
--except ImportError:
-+except:
-     err(_('ActivityWatch plugin unavailable: please install python-notify'))
- 
- config = Config()
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/patches/series terminator-1.91/debian/patches/series
--- /tmp/terminator-1.90+bzr-1705/debian/patches/series	2017-01-26 17:28:56.000000000 +0100
+++ terminator-1.91/debian/patches/series	2017-03-19 11:16:34.556860000 +0100
@@ -1,4 +1 @@
 not-install-terminator-wrapper.diff
-add-keywords-entry.diff
-gi-require-exception.diff
-subwindows-zero-size.patch
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/patches/subwindows-zero-size.patch terminator-1.91/debian/patches/subwindows-zero-size.patch
--- /tmp/terminator-1.90+bzr-1705/debian/patches/subwindows-zero-size.patch	2017-01-26 17:28:56.000000000 +0100
+++ terminator-1.91/debian/patches/subwindows-zero-size.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,38 +0,0 @@
-From: Emilio Pozuelo Monfort <po...@debian.org>
-
-https://bugs.launchpad.net/terminator/+bug/1646257
-
-=== modified file 'terminatorlib/paned.py'
---- a/terminatorlib/paned.py	2016-11-25 01:29:55 +0000
-+++ b/terminatorlib/paned.py	2017-01-17 21:16:58 +0000
-@@ -502,13 +502,13 @@
-         self.register_signals(HPaned)
-         self.cnxids.new(self, 'button-press-event', self.on_button_press)
-         self.cnxids.new(self, 'button-release-event', self.on_button_release)
--        self.set_property('position-set',  True)
- 
-     def get_length(self):
-         return(self.get_allocated_width())
- 
-     def set_pos(self, pos):
-         Gtk.HPaned.set_position(self, pos)
-+        self.set_property('position-set',  True)
- 
- class VPaned(Paned, Gtk.VPaned):
-     """Merge Gtk.VPaned into our base Paned Container"""
-@@ -519,13 +519,13 @@
-         self.register_signals(VPaned)
-         self.cnxids.new(self, 'button-press-event', self.on_button_press)
-         self.cnxids.new(self, 'button-release-event', self.on_button_release)
--        self.set_property('position-set',  True)
- 
-     def get_length(self):
-         return(self.get_allocated_height())
- 
-     def set_pos(self, pos):
-         Gtk.VPaned.set_position(self, pos)
-+        self.set_property('position-set',  True)
- 
- GObject.type_register(HPaned)
- GObject.type_register(VPaned)
-
diff -Nurd /tmp/terminator-1.90+bzr-1705/debian/terminator.debhelper.log terminator-1.91/debian/terminator.debhelper.log
--- /tmp/terminator-1.90+bzr-1705/debian/terminator.debhelper.log	1970-01-01 01:00:00.000000000 +0100
+++ terminator-1.91/debian/terminator.debhelper.log	2017-03-21 19:51:26.795145912 +0100
@@ -0,0 +1,2 @@
+dh_update_autotools_config
+dh_auto_configure
diff -Nurd /tmp/terminator-1.90+bzr-1705/doc/terminator.1 terminator-1.91/doc/terminator.1
--- /tmp/terminator-1.90+bzr-1705/doc/terminator.1	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/doc/terminator.1	2017-02-26 18:45:29.000000000 +0100
@@ -55,6 +55,9 @@
 .B \-\-working\-directory=DIR
 Set the terminal's working directory
 .TP
+.B \-g, \-\-config FILE
+Use the specified FILE for configuration
+.TP
 .B \-r, \-\-role=ROLE
 Set a custom WM_WINDOW_ROLE property on the window
 .TP
diff -Nurd /tmp/terminator-1.90+bzr-1705/setup.py terminator-1.91/setup.py
--- /tmp/terminator-1.90+bzr-1705/setup.py	2017-03-21 19:50:28.000000000 +0100
+++ terminator-1.91/setup.py	2017-02-28 23:09:52.000000000 +0100
@@ -188,7 +188,7 @@
 else:
   man_dir = 'share/man'
 
-setup(name=APP_NAME.capitalize(),
+setup(name=APP_NAME,
       version=APP_VERSION,
       description='Terminator, the robot future of terminals',
       author='Chris Jones',
@@ -197,6 +197,7 @@
       license='GNU GPL v2',
       scripts=['terminator', 'remotinator'],
       data_files=[
+                  ('bin', ['terminator.wrapper']),
                   ('share/appdata', ['data/terminator.appdata.xml']),
                   ('share/applications', ['data/terminator.desktop']),
                   (os.path.join(man_dir, 'man1'), ['doc/terminator.1']),
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminator terminator-1.91/terminator
--- /tmp/terminator-1.90+bzr-1705/terminator	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminator	2017-02-26 18:45:29.000000000 +0100
@@ -89,6 +89,8 @@
                 # get rid of the None and True types so dbus can handle them (empty
                 # and 'True' strings are used instead), also arrays are joined 
                 # (the -x argument for example)
+                if OPTIONS.working_directory is None:
+                    OPTIONS.working_directory = ORIGCWD
                 optionslist = {}
                 for opt, val in OPTIONS.__dict__.items():
                     if type(val) == type([]):
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminator.spec terminator-1.91/terminator.spec
--- /tmp/terminator-1.90+bzr-1705/terminator.spec	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminator.spec	1970-01-01 01:00:00.000000000 +0100
@@ -1,126 +0,0 @@
-Name:           terminator
-Version:        1.90
-Release:        1%{?dist}
-Summary:        Store and run multiple GNOME terminals in one window
-
-Group:          User Interface/Desktops
-License:        GPLv2
-URL:            https://gnometerminator.blogspot.com/p/introduction.html
-Source:         http://code.launchpad.net/terminator/gtk3/1.9/+download/terminator-%{version}.tar.gz
-
-BuildArch:      noarch
-BuildRequires:  python-devel gettext desktop-file-utils intltool
-Requires:       vte291 python-psutil python-gobject keybinder3 desktop-file-utils
-
-%description
-Multiple GNOME terminals in one window.  This is a project to produce
-an efficient way of filling a large area of screen space with
-terminals. This is done by splitting the window into a resizeable
-grid of terminals. As such, you can  produce a very flexible
-arrangements of terminals for different tasks.
-
-
-%prep
-%setup -q
-sed -i '/#! \?\/usr.*/d' terminatorlib/*.py
-%patch -p1
-
-
-%build
-%{__python} setup.py build
-
-
-%install
-rm -rf %{buildroot}
-%{__python} setup.py install -O1 --skip-build --root %{buildroot}
-%find_lang %{name}
-rm -f %{buildroot}/%{_datadir}/icons/hicolor/icon-theme.cache
-rm -f %{buildroot}/%{_datadir}/applications/%{name}.desktop
-desktop-file-install --dir=${RPM_BUILD_ROOT}%{_datadir}/applications data/%{name}.desktop
-
-
-%clean
-rm -rf %{buildroot}
-
-
-%files -f %{name}.lang
-%defattr(-,root,root)
-%doc README COPYING ChangeLog
-%{_mandir}/man1/%{name}.*
-%{_mandir}/man5/%{name}_config.*
-%{_bindir}/%{name}
-%{_bindir}/remotinator
-%{_bindir}/terminator.wrapper
-%{python_sitelib}/*
-%{_datadir}/applications/%{name}.desktop
-%{_datadir}/icons/hicolor/*/*/%{name}*.png
-%{_datadir}/icons/hicolor/*/*/%{name}*.svg
-%{_datadir}/icons/hicolor/16x16/status/terminal-bell.png
-%{_datadir}/pixmaps/%{name}.png
-%{_datadir}/icons/HighContrast/*/*/%{name}*.png
-%{_datadir}/icons/HighContrast/*/*/%{name}*.svg
-%{_datadir}/icons/HighContrast/16x16/status/terminal-bell.png
-%{_datadir}/appdata/terminator.appdata.xml
-
-%post
-gtk-update-icon-cache -qf %{_datadir}/icons/hicolor &>/dev/null || :
-gtk-update-icon-cache -qf %{_datadir}/icons/HighContrast &>/dev/null || :
-
-
-%postun
-gtk-update-icon-cache -qf %{_datadir}/icons/hicolor &>/dev/null || :
-gtk-update-icon-cache -qf %{_datadir}/icons/HighContrast &>/dev/null || :
-
-%changelog
-* Thu Nov 24 2016 Steve Boddy <stephen.j.bo...@gmail.com> 1.90-1
-- Update for gtk3 release using the specfile provided
-  by Matt Rose.
-    Note that this specfile is untested.
-
-* Mon Aug 22 2011 Chris Jones <c...@tenshu.net> 0.96-1
-- Update for modern release to fix various build issues
-  by borrowing the specfile that Fedora uses
-    Note that this specfile is untested.
-
-* Wed Mar 31 2010 Chris Jones <c...@tenshu.net> 0.91-1
-- Update to fix some stupid release bugs in 0.90.
-    Note that this specfile is untested.
-
-* Tue Jan 05 2010 Chris Jones <c...@tenshu.net> 0.90-1
-- Attempt to update for 0.90 pre-release.
-    Note that this specfile is untested.
-
-* Thu Jan 15 2009 Chris Jones <c...@tenshu.net> 0.12-1
-- Remove patch application since this isn't a fedora build.
-    Note that this specfile is untested.
-
-* Mon Dec 08 2008 Ian Weller <ianwel...@gmail.com> 0.11-3
-- Patch version in terminatorlib/verison.py to the one we think it is
-- Fix License tag
-- Update post and postun scripts with one line
-
-* Mon Dec 01 2008 Ian Weller <ianwel...@gmail.com> 0.11-2
-- Add BuildRequires: gettext
-- Fix installation of .desktop file
-- terminator-0.11-desktop.patch:
-    Remove useless things
-    Move to same category as gnome-terminal
-- Uses spaces instead of tabs in the specfile because I can't stand tabs
-
-* Mon Dec 01 2008 Ian Weller <ianwel...@gmail.com> 0.11-1
-- Update upstream
-- Fix description to something useful
-- Fix group
-- Fix some specfile oddities
-- Complete/restandardize file list
-- Get rid of she-bangs in python_sitelib
-
-* Sat Sep 13 2008 - Max Spevack <mspevack AT redhat DOT com> 0.10
-- New upstream release.
-- Tried to make sure the spec file matches guidelines on Fedora wiki.
-
-* Fri Jul 08 2008 - chantra AatT rpm-based DdOoTt org 0.9.fc9.rb
-- New upstream release
-
-* Sat May 17 2008 - chantra AatT rpm-based DdOoTt org 0.8.1.fc9.rb
-- Initial release for Fedora 9.
Binärdateien /tmp/terminator-1.90+bzr-1705/terminatorlib/__init__.pyc und terminator-1.91/terminatorlib/__init__.pyc sind verschieden.
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/config.py terminator-1.91/terminatorlib/config.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/config.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/config.py	2017-02-26 18:45:29.000000000 +0100
@@ -656,6 +656,16 @@
                        parser[section_name][layout] == {}:
                            continue
                     section[layout] = parser[section_name][layout]
+            elif section_name == 'keybindings':
+                if not parser.has_key(section_name):
+                    continue
+                for part in parser[section_name]:
+                    dbg('ConfigBase::load: Processing %s: %s' % (section_name,
+                                                                 part))
+                    if parser[section_name][part] == 'None':
+                        section[part] = None
+                    else:
+                        section[part] = parser[section_name][part]
             else:
                 try:
                     section.update(parser[section_name])
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/container.py terminator-1.91/terminatorlib/container.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/container.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/container.py	2017-02-26 18:45:29.000000000 +0100
@@ -127,6 +127,7 @@
             return(False)
 
         self.terminator.deregister_terminal(widget)
+        widget.close()
         self.terminator.group_hoover()
         return(True)
 
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/ipc.py terminator-1.91/terminatorlib/ipc.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/ipc.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/ipc.py	2017-02-26 18:45:29.000000000 +0100
@@ -11,7 +11,7 @@
 from terminator import Terminator
 from config import Config
 from factory import Factory
-from util import dbg
+from util import dbg,  enumerate_descendants
 
 CONFIG = Config()
 if not CONFIG['dbus']:
@@ -23,7 +23,7 @@
 BUS_PATH = '/net/tenshu/Terminator2'
 try:
     # Try and include the X11 display name in the dbus bus name
-    DISPLAY  = hex(hash(Gdk.get_display())).replace('-', '_')
+    DISPLAY  = hex(hash(Gdk.get_display().partition('.')[0]))
     BUS_NAME = '%s%s' % (BUS_BASE, DISPLAY)
 except:
     BUS_NAME = BUS_BASE
@@ -158,7 +158,15 @@
         window = terminal.get_toplevel()
         root_widget = window.get_children()[0]
         if maker.isinstance(root_widget, 'Notebook'):
-            return root_widget.uuid.urn
+            #return root_widget.uuid.urn
+            for tab_child in root_widget.get_children():
+                terms = [tab_child]
+                if not maker.isinstance(terms[0], "Terminal"):
+                    terms = enumerate_descendants(tab_child)[1]
+                if terminal in terms:
+                    # FIXME: There are no uuid's assigned to the the notebook, or the actual tabs!
+                    # This would fail: return root_widget.uuid.urn
+                    return ""
 
     @dbus.service.method(BUS_NAME)
     def get_tab_title(self, uuid=None):
@@ -168,7 +176,12 @@
         window = terminal.get_toplevel()
         root_widget = window.get_children()[0]
         if maker.isinstance(root_widget, "Notebook"):
-            return root_widget.get_tab_label(terminal).get_label()
+            for tab_child in root_widget.get_children():
+                terms = [tab_child]
+                if not maker.isinstance(terms[0], "Terminal"):
+                    terms = enumerate_descendants(tab_child)[1]
+                if terminal in terms:
+                    return root_widget.get_tab_label(tab_child).get_label()
 
 def with_proxy(func):
     """Decorator function to connect to the session dbus bus"""
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/notebook.py terminator-1.91/terminatorlib/notebook.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/notebook.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/notebook.py	2017-02-26 18:45:29.000000000 +0100
@@ -5,6 +5,7 @@
 
 from gi.repository import GObject
 from gi.repository import Gtk
+from gi.repository import Gdk
 from gi.repository import Gio
 
 from terminator import Terminator
@@ -35,6 +36,7 @@
         GObject.type_register(Notebook)
         self.register_signals(Notebook)
         self.connect('switch-page', self.deferred_on_tab_switch)
+        self.connect('scroll-event', self.on_scroll_event)
         self.configure()
 
         child = window.get_child()
@@ -160,10 +162,12 @@
         if not sibling:
             sibling = maker.make('terminal')
             sibling.set_cwd(cwd)
+            if self.config['always_split_with_profile']:
+                sibling.force_set_profile(None, widget.get_profile())
             sibling.spawn_child()
             if widget.group and self.config['split_to_group']:
                 sibling.set_group(None, widget.group)
-        if self.config['always_split_with_profile']:
+        elif self.config['always_split_with_profile']:
             sibling.force_set_profile(None, widget.get_profile())
 
         self.insert_page(container, None, page_num)
@@ -243,8 +247,10 @@
             widget = maker.make('Terminal')
             if cwd:
                 widget.set_cwd(cwd)
+            if profile and self.config['always_split_with_profile']:
+                widget.force_set_profile(None, profile)
             widget.spawn_child(debugserver=debugtab)
-        if profile and self.config['always_split_with_profile']:
+        elif profile and self.config['always_split_with_profile']:
             widget.force_set_profile(None, profile)
 
         signals = {'close-term': self.wrapcloseterm,
@@ -489,6 +495,55 @@
             GObject.idle_add(term.ensure_visible_and_focussed)
         return True
 
+    def on_scroll_event(self, notebook, event):
+        '''Handle scroll events for scrolling through tabs'''
+        #print "self: %s" % self
+        #print "event: %s" % event
+        child = self.get_nth_page(self.get_current_page())
+        if child == None:
+            print "Child = None,  return false"
+            return False
+
+        event_widget = Gtk.get_event_widget(event)
+        
+        if event_widget == None or \
+           event_widget == child or \
+           event_widget.is_ancestor(child):
+            print "event_widget is wrong one,  return false"
+            return False
+
+        # Not sure if we need these. I don't think wehave any action widgets
+        # at this point.
+        action_widget = self.get_action_widget(Gtk.PackType.START)
+        if event_widget == action_widget or \
+           (action_widget != None and event_widget.is_ancestor(action_widget)):
+            return False
+        action_widget = self.get_action_widget(Gtk.PackType.END)
+        if event_widget == action_widget or \
+           (action_widget != None and event_widget.is_ancestor(action_widget)):
+            return False
+
+        if event.direction in [Gdk.ScrollDirection.RIGHT,
+                               Gdk.ScrollDirection.DOWN]:
+            self.next_page()
+        elif event.direction in [Gdk.ScrollDirection.LEFT,
+                                 Gdk.ScrollDirection.UP]:
+            self.prev_page()
+        elif event.direction == Gdk.ScrollDirection.SMOOTH:
+            if self.get_tab_pos() in [Gtk.PositionType.LEFT,
+                                      Gtk.PositionType.RIGHT]:
+                if event.delta_y > 0:
+                    self.next_page()
+                elif event.delta_y < 0:
+                    self.prev_page()
+            elif self.get_tab_pos() in [Gtk.PositionType.TOP,
+                                        Gtk.PositionType.BOTTOM]:
+                if event.delta_x > 0:
+                    self.next_page()
+                elif event.delta_x < 0:
+                    self.prev_page()
+        return True
+
 class TabLabel(Gtk.HBox):
     """Class implementing a label widget for Notebook tabs"""
     notebook = None
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/paned.py terminator-1.91/terminatorlib/paned.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/paned.py	2017-03-21 19:50:28.000000000 +0100
+++ terminator-1.91/terminatorlib/paned.py	2017-02-26 18:45:29.000000000 +0100
@@ -51,10 +51,12 @@
         if not sibling:
             sibling = self.maker.make('terminal')
             sibling.set_cwd(cwd)
+            if self.config['always_split_with_profile']:
+                sibling.force_set_profile(None, widget.get_profile())
             sibling.spawn_child()
             if widget.group and self.config['split_to_group']:
                 sibling.set_group(None, widget.group)
-        if self.config['always_split_with_profile']:
+        elif self.config['always_split_with_profile']:
             sibling.force_set_profile(None, widget.get_profile())
 
         self.add(container)
@@ -472,19 +474,23 @@
             self.set_position(self.get_position())
     
     def position_by_ratio(self, total_size, handle_size, ratio):
-        non_separator_size = max(total_size, handle_size, 0)
+        non_separator_size = max(total_size - handle_size, 0)
         ratio = min(max(ratio, 0.0), 1.0)
         return int(round(non_separator_size * ratio))
 
     def ratio_by_position(self, total_size, handle_size, position):
-        non_separator_size = max(total_size, handle_size, 0)
+        non_separator_size = max(total_size - handle_size, 0)
         if non_separator_size == 0:
             return None
         position = min(max(position, 0), non_separator_size)
         return float(position) / float(non_separator_size)
 
     def set_position_by_ratio(self):
-        handle_size = handle_size = self.get_handlesize()
+        # Fix for strange race condition where every so often get_length returns 1. (LP:1655027)
+        while self.terminator.doing_layout and self.get_length() == 1:
+            while Gtk.events_pending():
+                Gtk.main_iteration()
+
         self.set_pos(self.position_by_ratio(self.get_length(), self.get_handlesize(), self.ratio))
 
     def set_position(self, pos):
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/plugins/activitywatch.py terminator-1.91/terminatorlib/plugins/activitywatch.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/plugins/activitywatch.py	2017-03-21 19:50:28.000000000 +0100
+++ terminator-1.91/terminatorlib/plugins/activitywatch.py	2017-02-26 18:45:29.000000000 +0100
@@ -21,8 +21,8 @@
     # This is inside this try so we only make the plugin available if pynotify
     #  is present on this computer.
     AVAILABLE = ['ActivityWatch', 'InactivityWatch']
-except:
-    err(_('ActivityWatch plugin unavailable: please install python-notify'))
+except (ImportError, ValueError):
+    err('ActivityWatch plugin unavailable as we cannot import Notify')
 
 config = Config()
 inactive_period = float(config.plugin_get('InactivityWatch', 'inactive_period',
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/plugins/custom_commands.py terminator-1.91/terminatorlib/plugins/custom_commands.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/plugins/custom_commands.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/plugins/custom_commands.py	2017-02-26 18:45:29.000000000 +0100
@@ -58,6 +58,7 @@
 
     def callback(self, menuitems, menu, terminal):
         """Add our menu items to the menu"""
+        submenus = {}
         item = Gtk.MenuItem.new_with_mnemonic(_('_Custom Commands'))
         menuitems.append(item)
 
@@ -77,16 +78,30 @@
             continue
           exe = command['command'].split(' ')[0]
           iconinfo = theme.choose_icon([exe], Gtk.IconSize.MENU, Gtk.IconLookupFlags.USE_BUILTIN)
+          leaf_name = command['name'].split('/')[-1]
+          branch_names = command['name'].split('/')[:-1]
+          target_submenu = submenu
+          parent_submenu = submenu
+          for idx in range(len(branch_names)):
+            lookup_name = '/'.join(branch_names[0:idx+1])
+            target_submenu = submenus.get(lookup_name, None)
+            if not target_submenu:
+              item = Gtk.MenuItem(_(branch_names[idx]))
+              parent_submenu.append(item)
+              target_submenu = Gtk.Menu()
+              item.set_submenu(target_submenu)
+              submenus[lookup_name] = target_submenu
+            parent_submenu = target_submenu
           if iconinfo:
             image = Gtk.Image()
             image.set_from_icon_name(exe, Gtk.IconSize.MENU)
-            menuitem = Gtk.ImageMenuItem(command['name'])
+            menuitem = Gtk.ImageMenuItem(leaf_name)
             menuitem.set_image(image)
           else:
-            menuitem = Gtk.MenuItem(command["name"])
+            menuitem = Gtk.MenuItem(leaf_name)
           terminals = terminal.terminator.get_target_terms(terminal)
           menuitem.connect("activate", self._execute, {'terminals' : terminals, 'command' : command['command'] })
-          submenu.append(menuitem)
+          target_submenu.append(menuitem)
         
     def _save_config(self):
       config = Config()
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/prefseditor.py terminator-1.91/terminatorlib/prefseditor.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/prefseditor.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/prefseditor.py	2017-02-26 18:45:29.000000000 +0100
@@ -1144,7 +1144,7 @@
             res = model.append([newprofile, True])
             if res:
                 path = model.get_path(res)
-                treeview.set_cursor(path, focus_column=treeview.get_column(0),
+                treeview.set_cursor(path, column=treeview.get_column(0),
                                     start_editing=True)
 
         self.layouteditor.update_profiles()
@@ -1189,8 +1189,7 @@
             res = model.append([name, True])
             if res:
                 path = model.get_path(res)
-                treeview.set_cursor(path, focus_column=treeview.get_column(0),
-                                    start_editing=True)
+                treeview.set_cursor(path, start_editing=True)
 
         self.config.save()
 
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/pylint.sh terminator-1.91/terminatorlib/pylint.sh
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/pylint.sh	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/pylint.sh	1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-#!/bin/bash
-
-for file in *.py; do
-  line=$(pylint $file 2>&1 | grep "^Your code has been rated")
-  rating=$(echo $line | cut -f 7 -d ' ')
-  previous=$(echo $line | cut -f 10 -d ' ')
-
-  if [ "$rating" != "10.00/10" ]; then
-    echo "$file rated $rating (previously $previous)"
-  fi
-done
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/searchbar.py terminator-1.91/terminatorlib/searchbar.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/searchbar.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/searchbar.py	2017-02-26 18:45:29.000000000 +0100
@@ -212,7 +212,7 @@
     def get_vte_buffer_range(self):
         """Get the range of a vte widget"""
         column, endrow = self.vte.get_cursor_position()
-        if self.config['scrollback_lines'] < 0:
+        if self.config['scrollback_infinite']:
             startrow = 0
         else:
             startrow = max(0, endrow - self.config['scrollback_lines'])
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/terminal.py terminator-1.91/terminatorlib/terminal.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/terminal.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/terminal.py	2017-02-26 18:45:29.000000000 +0100
@@ -89,6 +89,7 @@
     pid = None
 
     matches = None
+    regex_flags = None
     config = None
     default_encoding = None
     custom_encoding = None
@@ -142,6 +143,8 @@
         self.vte.show()
 
         self.default_encoding = self.vte.get_encoding()
+        self.regex_flags = (GLib.RegexCompileFlags.OPTIMIZE | \
+                            GLib.RegexCompileFlags.MULTILINE)
         self.update_url_matches()
 
         self.terminalbox = self.create_terminalbox()
@@ -224,7 +227,7 @@
     def close(self):
         """Close ourselves"""
         dbg('close: called')
-        self.cnxids.remove_signal(self.vte, 'child-exited')
+        self.cnxids.remove_widget(self.vte)
         self.emit('close-term')
         try:
             dbg('close: killing %d' % self.pid)
@@ -235,6 +238,10 @@
             dbg('os.kill failed: %s' % ex)
             pass
 
+        if self.vte:
+            self.terminalbox.remove(self.vte)
+            del(self.vte)
+
     def create_terminalbox(self):
         """Create a GtkHBox containing the terminal and a scrollbar"""
 
@@ -252,7 +259,7 @@
         """Update the regexps used to match URLs"""
         userchars = "-A-Za-z0-9"
         passchars = "-A-Za-z0-9,?;.:/!%$^*&~\"#'"
-        hostchars = "-A-Za-z0-9"
+        hostchars = "-A-Za-z0-9:\[\]"
         pathchars = "-A-Za-z0-9_$.+!*(),;:@&=?/~#%'"
         schemes   = "(news:|telnet:|nntp:|file:/|https?:|ftps?:|webcal:)"
         user      = "[" + userchars + "]+(:[" + passchars + "]+)?"
@@ -264,7 +271,7 @@
         re = (lboundry + schemes +
                 "//(" + user + "@)?[" + hostchars  +".]+(:[0-9]+)?(" + 
                 urlpath + ")?" + rboundry + "/?")
-        reg = GLib.Regex.new(re, GLib.RegexCompileFlags.OPTIMIZE, 0)
+        reg = GLib.Regex.new(re, self.regex_flags, 0)
         self.matches['full_uri'] = self.vte.match_add_gregex(reg, 0)
 
         if self.matches['full_uri'] == -1:
@@ -274,23 +281,23 @@
                     '(callto:|h323:|sip:)' + "[" + userchars + "+][" + 
                     userchars + ".]*(:[0-9]+)?@?[" + pathchars + "]+" + 
                     rboundry)
-            reg = GLib.Regex.new(re, GLib.RegexCompileFlags.OPTIMIZE, 0)
+            reg = GLib.Regex.new(re, self.regex_flags, 0)
             self.matches['voip'] = self.vte.match_add_gregex(reg, 0)
             re = (lboundry +
                     "(www|ftp)[" + hostchars + "]*\.[" + hostchars + 
                     ".]+(:[0-9]+)?(" + urlpath + ")?" + rboundry + "/?")
-            reg = GLib.Regex.new(re, GLib.RegexCompileFlags.OPTIMIZE, 0)
+            reg = GLib.Regex.new(re, self.regex_flags, 0)
             self.matches['addr_only'] = self.vte.match_add_gregex(reg, 0)
             re = (lboundry +
                     "(mailto:)?[a-zA-Z0-9][a-zA-Z0-9.+-]*@[a-zA-Z0-9]" +
                             "[a-zA-Z0-9-]*\.[a-zA-Z0-9][a-zA-Z0-9-]+" +
                             "[.a-zA-Z0-9-]*" + rboundry)
-            reg = GLib.Regex.new(re, GLib.RegexCompileFlags.OPTIMIZE, 0)
+            reg = GLib.Regex.new(re, self.regex_flags, 0)
             self.matches['email'] = self.vte.match_add_gregex(reg, 0)
             re = (lboundry +
                   """news:[-A-Z\^_a-z{|}~!"#$%&'()*+,./0-9;:=?`]+@""" +
                             "[-A-Za-z0-9.]+(:[0-9]+)?" + rboundry)
-            reg = GLib.Regex.new(re, GLib.RegexCompileFlags.OPTIMIZE, 0)
+            reg = GLib.Regex.new(re, self.regex_flags, 0)
             self.matches['nntp'] = self.vte.match_add_gregex(reg, 0)
 
             # Now add any matches from plugins
@@ -305,7 +312,7 @@
                     if name in self.matches:
                         dbg('refusing to add duplicate match %s' % name)
                         continue
-                    reg = GLib.Regex.new(match, GLib.RegexCompileFlags.OPTIMIZE, 0)
+                    reg = GLib.Regex.new(match, self.regex_flags, 0)
                     self.matches[name] = self.vte.match_add_gregex(reg, 0)
                     dbg('added plugin URL handler for %s (%s) as %d' % 
                         (name, urlplugin.__class__.__name__,
@@ -318,7 +325,7 @@
         if name in self.matches:
             err('Terminal::match_add: Refusing to create duplicate match %s' % name)
             return
-        reg = GLib.Regex.new(match, GLib.RegexCompileFlags.OPTIMIZE, 0)
+        reg = GLib.Regex.new(match, self.regex_flags, 0)
         self.matches[name] = self.vte.match_add_gregex(reg, 0)
 
     def match_remove(self, name):
@@ -330,7 +337,7 @@
         del(self.matches[name])
 
     def maybe_copy_clipboard(self):
-        if self.config['copy_on_selection']:
+        if self.config['copy_on_selection'] and self.vte.get_has_selection():
             self.vte.copy_clipboard()
 
     def connect_signals(self):
@@ -338,10 +345,10 @@
 
         self.scrollbar.connect('button-press-event', self.on_buttonpress)
 
-        self.vte.connect('key-press-event', self.on_keypress)
-        self.vte.connect('button-press-event', self.on_buttonpress)
-        self.vte.connect('scroll-event', self.on_mousewheel)
-        self.vte.connect('popup-menu', self.popup_menu)
+        self.cnxids.new(self.vte, 'key-press-event', self.on_keypress)
+        self.cnxids.new(self.vte, 'button-press-event', self.on_buttonpress)
+        self.cnxids.new(self.vte, 'scroll-event', self.on_mousewheel)
+        self.cnxids.new(self.vte, 'popup-menu', self.popup_menu)
 
         srcvtetargets = [("vte", Gtk.TargetFlags.SAME_APP, self.TARGET_TYPE_VTE)]
         dsttargets = [("vte", Gtk.TargetFlags.SAME_APP, self.TARGET_TYPE_VTE), 
@@ -383,29 +390,29 @@
                 dsttargets, Gdk.DragAction.COPY | Gdk.DragAction.MOVE)
 
         for widget in [self.vte, self.titlebar]:
-            widget.connect('drag-begin', self.on_drag_begin, self)
-            widget.connect('drag-data-get', self.on_drag_data_get,
+            self.cnxids.new(widget, 'drag-begin', self.on_drag_begin, self)
+            self.cnxids.new(widget, 'drag-data-get', self.on_drag_data_get,
             self)
 
-        self.vte.connect('drag-motion', self.on_drag_motion, self)
-        self.vte.connect('drag-data-received',
+        self.cnxids.new(self.vte, 'drag-motion', self.on_drag_motion, self)
+        self.cnxids.new(self.vte, 'drag-data-received',
             self.on_drag_data_received, self)
 
         self.cnxids.new(self.vte, 'selection-changed', 
             lambda widget: self.maybe_copy_clipboard())
 
         if self.composite_support:
-            self.vte.connect('composited-changed', self.reconfigure)
+            self.cnxids.new(self.vte, 'composited-changed', self.reconfigure)
 
-        self.vte.connect('window-title-changed', lambda x:
+        self.cnxids.new(self.vte, 'window-title-changed', lambda x:
             self.emit('title-change', self.get_window_title()))
-        self.vte.connect('grab-focus', self.on_vte_focus)
-        self.vte.connect('focus-in-event', self.on_vte_focus_in)
-        self.vte.connect('focus-out-event', self.on_vte_focus_out)
-        self.vte.connect('size-allocate', self.deferred_on_vte_size_allocate)
+        self.cnxids.new(self.vte, 'grab-focus', self.on_vte_focus)
+        self.cnxids.new(self.vte, 'focus-in-event', self.on_vte_focus_in)
+        self.cnxids.new(self.vte, 'focus-out-event', self.on_vte_focus_out)
+        self.cnxids.new(self.vte, 'size-allocate', self.deferred_on_vte_size_allocate)
 
         self.vte.add_events(Gdk.EventMask.ENTER_NOTIFY_MASK)
-        self.vte.connect('enter_notify_event',
+        self.cnxids.new(self.vte, 'enter_notify_event',
             self.on_vte_notify_enter)
 
         self.cnxids.new(self.vte, 'realize', self.reconfigure)
@@ -1175,7 +1182,7 @@
     def ensure_visible_and_focussed(self):
         """Make sure that we're visible and focussed"""
         window = self.get_toplevel()
-        topchild = window.get_child()
+        topchild = window.get_children()[0]
         maker = Factory()
 
         if maker.isinstance(topchild, 'Notebook'):
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/terminal_popup_menu.py terminator-1.91/terminatorlib/terminal_popup_menu.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/terminal_popup_menu.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/terminal_popup_menu.py	2017-02-26 18:45:29.000000000 +0100
@@ -4,6 +4,8 @@
 """terminal_popup_menu.py - classes necessary to provide a terminal context 
 menu"""
 
+import string
+
 from gi.repository import Gtk
 
 from version import APP_NAME
@@ -189,7 +191,7 @@
             item.connect('activate', lambda x: PrefsEditor(self.terminal))
             menu.append(item)
 
-        profilelist = self.config.list_profiles()
+        profilelist = sorted(self.config.list_profiles(), key=string.lower)
 
         if len(profilelist) > 1:
             item = Gtk.MenuItem.new_with_mnemonic(_('Profiles'))
@@ -202,7 +204,10 @@
             group = None
 
             for profile in profilelist:
-                item = Gtk.RadioMenuItem(profile.capitalize(), group)
+                profile_label = profile
+                if profile_label == 'default':
+                    profile_label = profile.capitalize()
+                item = Gtk.RadioMenuItem(profile_label, group)
                 if profile == current:
                     item.set_active(True)
                 item.connect('activate', terminal.force_set_profile, profile)
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/terminator.py terminator-1.91/terminatorlib/terminator.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/terminator.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/terminator.py	2017-02-28 23:07:22.000000000 +0100
@@ -7,7 +7,8 @@
 import os
 import gi
 gi.require_version('Vte', '2.91')
-from gi.repository import Gtk, Gdk, Vte
+from gi.repository import Gtk, Gdk, Vte, GdkX11
+from gi.repository.GLib import GError
 
 import borg
 from borg import Borg
@@ -56,6 +57,7 @@
     doing_layout = None
     layoutname = None
     last_active_window = None
+    prelayout_windows = None
 
     groupsend = None
     groupsend_type = {'all':0, 'group':1, 'off':2}
@@ -216,6 +218,15 @@
                 return terminal
         return None
 
+    def find_window_by_uuid(self, uuid):
+        """Search our terminals for one matching the supplied UUID"""
+        dbg('searching self.terminals for: %s' % uuid)
+        for window in self.windows:
+            dbg('checking: %s (%s)' % (window.uuid.urn, window))
+            if window.uuid.urn == uuid:
+                return window
+        return None
+
     def new_window(self, cwd=None, profile=None):
         """Create a window with a Terminal in it"""
         maker = Factory()
@@ -237,6 +248,8 @@
         objects = {}
 
         self.doing_layout = True
+        self.last_active_window = None
+        self.prelayout_windows = self.windows[:]
 
         layout = copy.deepcopy(self.config.layout_get_config(layoutname))
         if not layout:
@@ -376,9 +389,39 @@
                     term = self.find_terminal_by_uuid(window_last_active_term_mapping[window].urn)
                     term.ensure_visible_and_focussed()
 
+        # Build list of new windows using prelayout list
+        new_win_list = []
         for window in self.windows:
-            if window.uuid == self.last_active_window:
+            if window not in self.prelayout_windows:
+                new_win_list.append(window)
+        
+        # Make sure all new windows get bumped to the top
+        for window in new_win_list:
+            window.show()
+            window.grab_focus()
+            try:
+                t = GdkX11.x11_get_server_time(window.get_window())
+            except (TypeError, AttributeError):
+                t = 0
+            window.get_window().focus(t)
+
+        # Awful workaround to be sure that the last focused window is actually the one focused.
+        # Don't ask, don't tell policy on this. Even this is not 100%
+        if self.last_active_window:
+            window = self.find_window_by_uuid(self.last_active_window.urn)
+            count = 0
+            while count < 1000 and Gtk.events_pending():
+                count += 1
+                Gtk.main_iteration_do(False)
                 window.show()
+                window.grab_focus()
+                try:
+                    t = GdkX11.x11_get_server_time(window.get_window())
+                except (TypeError, AttributeError):
+                    t = 0
+                window.get_window().focus(t)
+
+        self.prelayout_windows = None
 
     def on_gtk_theme_name_notify(self, settings, prop):
         """Reconfigure if the gtk theme name changes"""
@@ -404,7 +447,8 @@
             .terminator-terminal-window {
                 background-color: alpha(@theme_bg_color,0); }
 
-            .terminator-terminal-window .notebook.header {
+            .terminator-terminal-window .notebook.header,
+            .terminator-terminal-window notebook header {
                 background-color: @theme_bg_color; }
 
             .terminator-terminal-window .pane-separator {
@@ -417,7 +461,8 @@
         # Fix several themes that put a borders, corners, or backgrounds around
         # viewports, making the titlebar look bad.
         css += """
-            .terminator-terminal-window GtkViewport {
+            .terminator-terminal-window GtkViewport,
+            .terminator-terminal-window viewport {
                 border-width: 0px;
                 border-radius: 0px;
                 background-color: transparent; }
@@ -477,7 +522,16 @@
                                                           theme_part_file)
                 if os.path.isfile(path_to_theme_specific_css):
                     style_provider = Gtk.CssProvider()
-                    style_provider.load_from_path(path_to_theme_specific_css)
+                    style_provider.connect('parsing-error', self.on_css_parsing_error)
+                    try:
+                        style_provider.load_from_path(path_to_theme_specific_css)
+                    except GError:
+                        # Hmmm. Should we try to provide GTK version specific files here on failure?
+                        gtk_version_string = '.'.join([str(Gtk.get_major_version()),
+                                                       str(Gtk.get_minor_version()),
+                                                       str(Gtk.get_micro_version())])
+                        err('Error(s) loading css from %s into Gtk %s' % (path_to_theme_specific_css,
+                                                                          gtk_version_string))
                     self.style_providers.append(style_provider)
                     break
 
@@ -485,7 +539,8 @@
         css = ""
         if self.config['handle_size'] in xrange(0, 21):
             css += """
-                .terminator-terminal-window GtkPaned {
+                .terminator-terminal-window GtkPaned,
+                .terminator-terminal-window paned {
                     -GtkPaned-handle-size: %s; }
                 """ % self.config['handle_size']
         style_provider = Gtk.CssProvider()
@@ -514,6 +569,15 @@
             if maker.isinstance(child, 'Notebook'):
                 child.configure()
 
+    def on_css_parsing_error(self, provider, section, error, user_data=None):
+        """Report CSS parsing issues"""
+        file_path = section.get_file().get_path()
+        line_no = section.get_end_line() +1
+        col_no = section.get_end_position() + 1
+        err('%s, at line %d, column %d, of file %s' % (error.message,
+                                                       line_no, col_no,
+                                                       file_path))
+
     def create_group(self, name):
         """Create a new group"""
         if name not in self.groups:
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/util.py terminator-1.91/terminatorlib/util.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/util.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/util.py	2017-02-26 18:45:29.000000000 +0100
@@ -17,13 +17,20 @@
 """Terminator.util - misc utility functions"""
 
 import sys
-from gi.repository import Gtk, Gdk
 import cairo
 import os
 import pwd
 import inspect
 import uuid
 import subprocess
+import gi
+
+try:
+    gi.require_version('Gtk','3.0')
+    from gi.repository import Gtk, Gdk
+except ImportError:
+    print('You need Gtk 3.0+ to run Remotinator.')
+    sys.exit(1)
 
 # set this to true to enable debugging output
 DEBUG = False
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/version.py terminator-1.91/terminatorlib/version.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/version.py	2017-01-26 17:10:52.000000000 +0100
+++ terminator-1.91/terminatorlib/version.py	2017-02-26 18:45:29.000000000 +0100
@@ -21,4 +21,4 @@
 """
 
 APP_NAME = 'terminator'
-APP_VERSION = '1.90'
+APP_VERSION = '1.91'
Binärdateien /tmp/terminator-1.90+bzr-1705/terminatorlib/version.pyc und terminator-1.91/terminatorlib/version.pyc sind verschieden.
diff -Nurd /tmp/terminator-1.90+bzr-1705/terminatorlib/window.py terminator-1.91/terminatorlib/window.py
--- /tmp/terminator-1.90+bzr-1705/terminatorlib/window.py	2017-03-21 19:50:28.000000000 +0100
+++ terminator-1.91/terminatorlib/window.py	2017-02-28 23:07:22.000000000 +0100
@@ -23,8 +23,8 @@
         gi.require_version('Keybinder', '3.0')
         from gi.repository import Keybinder
         Keybinder.init()
-    except:
-        err('Warning: python-keybinder is not installed. This means the \
+    except (ImportError, ValueError):
+        err('Unable to load Keybinder module. This means the \
 hide_window shortcut will be unavailable')
 
 # pylint: disable-msg=R0904
@@ -127,7 +127,7 @@
             if display_manager() == 'X11':
                 try:
                     self.hidebound = Keybinder.bind(
-                        self.config['keybindings']['hide_window'],
+                        self.config['keybindings']['hide_window'].replace('<Shift>',''),
                         self.on_hide_window)
                 except (KeyError, NameError):
                     pass
@@ -270,8 +270,11 @@
         """Handle a window close request"""
         maker = Factory()
         if maker.isinstance(self.get_child(), 'Terminal'):
-            dbg('Window::on_delete_event: Only one child, closing is fine')
-            return(False)
+            if self.get_property('term_zoomed') == True:
+                return(self.confirm_close(window, _('window')))
+            else:
+                dbg('Window::on_delete_event: Only one child, closing is fine')
+                return(False)
         elif maker.isinstance(self.get_child(), 'Container'):
             return(self.confirm_close(window, _('window')))
         else:
@@ -307,13 +310,10 @@
             self.show()
             self.grab_focus()
             try:
-                t = GdkX11.x11_get_server_time(self.window)
-            except AttributeError:
+                t = GdkX11.x11_get_server_time(self.get_window())
+            except (TypeError, AttributeError):
                 t = 0
-            print t
-            print self
-            print self.window
-            self.window.focus(t)
+            self.get_window().focus(t)
         else:
             self.position = self.get_position()
             self.hidefunc()
@@ -468,10 +468,12 @@
         if not sibling:
             sibling = maker.make('Terminal')
             sibling.set_cwd(cwd)
+            if self.config['always_split_with_profile']:
+                sibling.force_set_profile(None, widget.get_profile())
             sibling.spawn_child()
             if widget.group and self.config['split_to_group']:
                 sibling.set_group(None, widget.group)
-        if self.config['always_split_with_profile']:
+        elif self.config['always_split_with_profile']:
             sibling.force_set_profile(None, widget.get_profile())
 
         self.add(container)

Reply via email to