Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package terminus for openSUSE:Factory 
checked in at 2023-05-02 16:19:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/terminus (Old)
 and      /work/SRC/openSUSE:Factory/.terminus.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "terminus"

Tue May  2 16:19:28 2023 rev:12 rq:1083985 version:2.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/terminus/terminus.changes        2023-02-08 
17:21:00.254152593 +0100
+++ /work/SRC/openSUSE:Factory/.terminus.new.1533/terminus.changes      
2023-05-02 16:24:12.771655750 +0200
@@ -1,0 +2,12 @@
+Tue Apr 18 10:11:08 UTC 2023 - Andrea Manzini <andrea.manz...@suse.com>
+
+- Update to version 2.3.1:
+  * Added support for gnome shell 44
+  * Allow to reorder tabs
+  * Added support for links
+  * Removed debug prints
+  * Added macros support
+  * Show 30 characters in tabs
+  * Fixed several leaks
+
+-------------------------------------------------------------------

Old:
----
  terminus-2.1.0.tar.bz2

New:
----
  terminus-2.3.1.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ terminus.spec ++++++
--- /var/tmp/diff_new_pack.7A6jTR/_old  2023-05-02 16:24:13.179658169 +0200
+++ /var/tmp/diff_new_pack.7A6jTR/_new  2023-05-02 16:24:13.187658216 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           terminus
-Version:        2.1.0
+Version:        2.3.1
 Release:        0
 Summary:        An X terminal written in Vala
 License:        GPL-3.0-only
@@ -82,7 +82,7 @@
 %{_datadir}/glib-2.0/schemas/org.rastersoft.terminus.gschema.xml
 %{_datadir}/icons/hicolor/*/apps/terminus.??g
 %{_datadir}/terminus/
-%{_sysconfdir}/xdg/autostart/terminus_autorun.desktop
+%config %{_sysconfdir}/xdg/autostart/terminus_autorun.desktop
 
 %files -n gnome-shell-extension-terminus
 %dir %{_datadir}/gnome-shell

++++++ terminus-2.1.0.tar.bz2 -> terminus-2.3.1.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/CMakeLists.txt 
new/terminus-2.3.1/CMakeLists.txt
--- old/terminus-2.1.0/CMakeLists.txt   2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/CMakeLists.txt   2023-04-17 15:23:46.000000000 +0200
@@ -34,11 +34,13 @@
 
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} gdk-3.0)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} gtk+-3.0)
+set(MODULES_TO_CHECK ${MODULES_TO_CHECK} cairo)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} gee-0.8)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} gio-2.0)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} gio-unix-2.0)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} glib-2.0)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} gobject-2.0)
+set(MODULES_TO_CHECK ${MODULES_TO_CHECK} harfbuzz-gobject)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} keybinder-3.0)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} pango)
 set(MODULES_TO_CHECK ${MODULES_TO_CHECK} vte-2.91)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/HISTORY.md 
new/terminus-2.3.1/HISTORY.md
--- old/terminus-2.1.0/HISTORY.md       2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/HISTORY.md       2023-04-17 15:23:46.000000000 +0200
@@ -1,5 +1,16 @@
 # History of versions #
 
+* Version 2.3.1 (2023-04-17)
+  * Added support for gnome shell 44
+* Version 2.3.0 (2023-04-09)
+  * Allow to reorder tabs
+  * Added support for links
+* Version 2.2.1 (2023-03-01)
+  * Removed debug prints
+* Version 2.2.0 (2023-02-12)
+  * Added macros support
+  * Show 30 characters in tabs
+  * Fixed several leaks
 * Version 2.1.0 (2023-01-28)
   * Ensure that the Guake window is always inside the screen
 * Version 2.0.1 (2022-12-11)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/PKGBUILD new/terminus-2.3.1/PKGBUILD
--- old/terminus-2.1.0/PKGBUILD 2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/PKGBUILD 2023-04-17 15:23:46.000000000 +0200
@@ -1,5 +1,5 @@
 pkgname=terminus-rastersoft
-pkgver=2.1.0
+pkgver=2.3.1
 pkgrel=2
 pkgdesc="X & Wayland terminal that mixes the capabilities of Guake and 
Terminator"
 license=('GPL3')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/data/interface/properties.ui 
new/terminus-2.3.1/data/interface/properties.ui
--- old/terminus-2.1.0/data/interface/properties.ui     2023-01-28 
13:03:57.000000000 +0100
+++ new/terminus-2.3.1/data/interface/properties.ui     2023-04-17 
15:23:46.000000000 +0200
@@ -32,6 +32,14 @@
       </row>
     </data>
   </object>
+  <object class="GtkListStore" id="macros_store">
+    <columns>
+      <!-- column-name keybind -->
+      <column type="gchararray"/>
+      <!-- column-name command -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkListStore" id="palette_schemes">
     <columns>
       <!-- column-name gchararray1 -->
@@ -46,6 +54,7 @@
     <property name="page-increment">10</property>
   </object>
   <object class="GtkWindow">
+    <property name="width-request">650</property>
     <property name="can-focus">False</property>
     <child>
       <object class="GtkNotebook" id="properties_notebook">
@@ -924,7 +933,7 @@
             <property name="orientation">vertical</property>
             <property name="baseline-position">top</property>
             <child>
-              <!-- n-columns=3 n-rows=3 -->
+              <!-- n-columns=2 n-rows=2 -->
               <object class="GtkGrid">
                 <property name="visible">True</property>
                 <property name="can-focus">False</property>
@@ -976,21 +985,6 @@
                     <property name="top-attach">1</property>
                   </packing>
                 </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -1054,16 +1048,23 @@
           </packing>
         </child>
         <child>
-          <object class="GtkTreeView" id="keybindings">
+          <object class="GtkScrolledWindow">
             <property name="visible">True</property>
             <property name="can-focus">True</property>
-            <property name="margin-start">8</property>
-            <property name="margin-end">8</property>
-            <property name="margin-top">8</property>
-            <property name="margin-bottom">8</property>
-            <property name="enable-search">False</property>
-            <child internal-child="selection">
-              <object class="GtkTreeSelection"/>
+            <property name="shadow-type">in</property>
+            <child>
+              <object class="GtkTreeView" id="keybindings">
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="margin-start">8</property>
+                <property name="margin-end">8</property>
+                <property name="margin-top">8</property>
+                <property name="margin-bottom">8</property>
+                <property name="enable-search">False</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection"/>
+                </child>
+              </object>
             </child>
           </object>
           <packing>
@@ -1085,6 +1086,155 @@
           <object class="GtkBox">
             <property name="visible">True</property>
             <property name="can-focus">False</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkScrolledWindow">
+                <property name="visible">True</property>
+                <property name="can-focus">True</property>
+                <property name="shadow-type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="macros_view">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="model">macros_store</property>
+                    <property name="enable-search">False</property>
+                    <property name="search-column">0</property>
+                    <property name="enable-grid-lines">horizontal</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection"/>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn">
+                        <property name="title" 
translatable="yes">Keybind</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="key"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn">
+                        <property name="title" 
translatable="yes">Command</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="command"/>
+                          <attributes>
+                            <attribute name="text">1</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <!-- n-columns=2 n-rows=3 -->
+              <object class="GtkGrid">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="row-homogeneous">True</property>
+                <property name="column-homogeneous">True</property>
+                <child>
+                  <object class="GtkLabel">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="label" 
translatable="yes">Keybinding</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="label" 
translatable="yes">Command</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="macro_keybinding">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="macro_command">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <signal name="changed" handler="on_macro_command_changed" 
swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="add_macro">
+                    <property name="label" translatable="yes">Add</property>
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">True</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">0</property>
+                    <property name="top-attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="delete_macro">
+                    <property name="label" translatable="yes">Delete</property>
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">True</property>
+                  </object>
+                  <packing>
+                    <property name="left-attach">1</property>
+                    <property name="top-attach">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">4</property>
+          </packing>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel">
+            <property name="visible">True</property>
+            <property name="can-focus">False</property>
+            <property name="label" translatable="yes">Macros</property>
+          </object>
+          <packing>
+            <property name="position">4</property>
+            <property name="tab-fill">False</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="visible">True</property>
+            <property name="can-focus">False</property>
             <property name="margin-start">8</property>
             <property name="margin-end">8</property>
             <property name="margin-top">8</property>
@@ -1133,7 +1283,7 @@
             </child>
           </object>
           <packing>
-            <property name="position">4</property>
+            <property name="position">5</property>
           </packing>
         </child>
         <child type="tab">
@@ -1143,7 +1293,7 @@
             <property name="label" translatable="yes">About</property>
           </object>
           <packing>
-            <property name="position">4</property>
+            <property name="position">5</property>
             <property name="tab-fill">False</property>
           </packing>
         </child>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/terminus-2.1.0/data/org.rastersoft.terminus.gschema.xml 
new/terminus-2.3.1/data/org.rastersoft.terminus.gschema.xml
--- old/terminus-2.1.0/data/org.rastersoft.terminus.gschema.xml 2023-01-28 
13:03:57.000000000 +0100
+++ new/terminus-2.3.1/data/org.rastersoft.terminus.gschema.xml 2023-04-17 
15:23:46.000000000 +0200
@@ -136,6 +136,16 @@
       <summary>Hide the mouse cursor when typing, and show it again when 
moving the mouse.</summary>
       <description></description>
     </key>
+    <key type="a(sss)" name="macros">
+      <default>[]</default>
+      <summary>Array with the macros defined.</summary>
+      <description>An array with all the macros defined. Each macro comprises 
three strings: the first is the key, the second is the command to run, and the 
third is the program where to use that macro (empty to use it in any 
program).</description>
+    </key>
+    <key type="i" name="max-tab-text-len">
+      <default>30</default>
+      <summary>Maximum lenght for tab text</summary>
+      <description>The maximum lenght for the text in each tab.</description>
+    </key>
          <!--<key type="" name="">
       <default></default>
       <summary></summary>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/debian/changelog 
new/terminus-2.3.1/debian/changelog
--- old/terminus-2.1.0/debian/changelog 2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/debian/changelog 2023-04-17 15:23:46.000000000 +0200
@@ -1,3 +1,30 @@
+terminus (2.3.1-Debian1) sid; urgency=low
+
+  * Added support for gnome shell 44
+
+ -- Sergio Costas Rodriguez <ras...@rastersoft.com>  Mon, 17 Apr 2023 23:55:00 
+0200
+
+terminus (2.3.0-Debian1) sid; urgency=low
+
+  * Allow to reorder tabs
+  * Added support for links
+
+ -- Sergio Costas Rodriguez <ras...@rastersoft.com>  Sun, 09 Apr 2023 23:55:00 
+0200
+
+terminus (2.2.1-Debian1) sid; urgency=low
+
+  * Removed debug prints
+
+ -- Sergio Costas Rodriguez <ras...@rastersoft.com>  Wed, 01 Mar 2023 23:55:00 
+0200
+
+terminus (2.2.0-Debian1) sid; urgency=low
+
+  * Added macros support
+  * Show 30 characters in tabs
+  * Fixed several leaks
+
+ -- Sergio Costas Rodriguez <ras...@rastersoft.com>  Sun, 12 Feb 2023 23:55:00 
+0200
+
 terminus (2.1.0-Debian1) sid; urgency=low
 
   * Ensure that the Guake window is always inside the screen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/debian/control 
new/terminus-2.3.1/debian/control
--- old/terminus-2.1.0/debian/control   2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/debian/control   2023-04-17 15:23:46.000000000 +0200
@@ -8,7 +8,7 @@
 
 Package: terminus
 Architecture: any
-Version: 2.1.0
+Version: 2.3.1
 Depends: libgee-0.8-2, libkeybinder-3.0-0, libvte-2.91-0, libpcre3, 
libglib2.0-bin
 Description: A new terminal for X11 and Wayland both for classic,
  in-window terminal, and Guake-like (hot-key drop-down mode)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/meson.build 
new/terminus-2.3.1/meson.build
--- old/terminus-2.1.0/meson.build      2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/meson.build      2023-04-17 15:23:46.000000000 +0200
@@ -1,6 +1,6 @@
 project('terminus',
   ['c','vala'],
-  version: '2.1.0')
+  version: '2.3.1')
 
 add_global_arguments('-DGETTEXT_PACKAGE="terminus"',language: 'c')
 
@@ -9,11 +9,13 @@
 find_program ('glib-compile-schemas')
 gdk_3_0_dep = dependency('gdk-3.0')
 gtk_3_0_dep = dependency('gtk+-3.0')
+cairo_dep = dependency('cairo')
 gee_0_8_dep = dependency('gee-0.8')
 gio_2_0_dep = dependency('gio-2.0')
 gio_unix_2_0_dep = dependency('gio-unix-2.0')
 glib_2_0_dep = dependency('glib-2.0')
 gobject_2_0_dep = dependency('gobject-2.0')
+harfbuzz_gobject_dep = dependency('harfbuzz-gobject')
 keybinder_3_0_dep = dependency('keybinder-3.0')
 pango_dep = dependency('pango')
 vte_2_91_dep = dependency('vte-2.91')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/po/POTFILES.in 
new/terminus-2.3.1/po/POTFILES.in
--- old/terminus-2.1.0/po/POTFILES.in   2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/po/POTFILES.in   2023-04-17 15:23:46.000000000 +0200
@@ -5,6 +5,7 @@
 src/definitions.vala
 src/dndManager.vala
 src/keybinding.vala
+src/macros.vala
 src/notetab.vala
 src/palete.vala
 src/params.vala
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/rpmbuild/SPECS/terminus.spec 
new/terminus-2.3.1/rpmbuild/SPECS/terminus.spec
--- old/terminus-2.1.0/rpmbuild/SPECS/terminus.spec     2023-01-28 
13:03:57.000000000 +0100
+++ new/terminus-2.3.1/rpmbuild/SPECS/terminus.spec     2023-04-17 
15:23:46.000000000 +0200
@@ -1,5 +1,5 @@
 Name: terminus
-Version: 2.1.0
+Version: 2.3.1
 Release: 1
 License: Unknown/not set
 Summary: X and Wayland terminal that mixes the capabilities of Guake and 
Terminator
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/CMakeLists.txt 
new/terminus-2.3.1/src/CMakeLists.txt
--- old/terminus-2.1.0/src/CMakeLists.txt       2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/CMakeLists.txt       2023-04-17 15:23:46.000000000 
+0200
@@ -7,13 +7,13 @@
 set (RELEASE_NAME "terminus")
 set (CMAKE_C_FLAGS "")
 set (PREFIX ${CMAKE_INSTALL_PREFIX})
-set (VERSION "2.1.0")
+set (VERSION "2.3.1")
 set (TESTSRCDIR "${CMAKE_SOURCE_DIR}")
 set (DOLLAR "$")
 
 configure_file (${CMAKE_SOURCE_DIR}/src/Config.vala.base 
${CMAKE_BINARY_DIR}/src/Config.vala)
 add_definitions(-DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\")
-set (VERSION "2.1.0")
+set (VERSION "2.3.1")
 add_definitions (${DEPS_CFLAGS})
 link_libraries ( ${DEPS_LIBRARIES} )
 link_directories ( ${DEPS_LIBRARY_DIRS} )
@@ -25,11 +25,13 @@
 set (VALA_PACKAGES ${VALA_PACKAGES} posix)
 set (VALA_PACKAGES ${VALA_PACKAGES} gdk-3.0)
 set (VALA_PACKAGES ${VALA_PACKAGES} gtk+-3.0)
+set (VALA_PACKAGES ${VALA_PACKAGES} cairo)
 set (VALA_PACKAGES ${VALA_PACKAGES} gee-0.8)
 set (VALA_PACKAGES ${VALA_PACKAGES} gio-2.0)
 set (VALA_PACKAGES ${VALA_PACKAGES} gio-unix-2.0)
 set (VALA_PACKAGES ${VALA_PACKAGES} glib-2.0)
 set (VALA_PACKAGES ${VALA_PACKAGES} gobject-2.0)
+set (VALA_PACKAGES ${VALA_PACKAGES} harfbuzz-gobject)
 set (VALA_PACKAGES ${VALA_PACKAGES} keybinder-3.0)
 set (VALA_PACKAGES ${VALA_PACKAGES} pango)
 set (VALA_PACKAGES ${VALA_PACKAGES} vte-2.91)
@@ -42,6 +44,7 @@
 set (APP_SOURCES ${APP_SOURCES} definitions.vala)
 set (APP_SOURCES ${APP_SOURCES} dndManager.vala)
 set (APP_SOURCES ${APP_SOURCES} keybinding.vala)
+set (APP_SOURCES ${APP_SOURCES} macros.vala)
 set (APP_SOURCES ${APP_SOURCES} notetab.vala)
 set (APP_SOURCES ${APP_SOURCES} palete.vala)
 set (APP_SOURCES ${APP_SOURCES} params.vala)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/base.vala 
new/terminus-2.3.1/src/base.vala
--- old/terminus-2.1.0/src/base.vala    2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/src/base.vala    2023-04-17 15:23:46.000000000 +0200
@@ -30,7 +30,7 @@
         public signal void
         new_window();
 
-        public Gtk.Window ?top_window;
+        public weak Gtk.Window ?top_window;
         private Gtk.MessageDialog notification_window;
         private ulong dnd_status_id;
 
@@ -112,12 +112,16 @@
                          Terminal ?terminal = null)
         {
             var term = new Terminus.Container(this, working_directory, 
commands, terminal, null, null);
+            var notetab = new Terminus.Notetab(this, term);
+            term.notetab = notetab;
             term.ended.connect((w) => {
                 this.delete_page(term);
+                term.dispose();
             });
             term.show_all();
-            var page = this.append_page(term, term.notetab);
+            var page = this.append_page(term, notetab);
             this.set_current_page(page);
+            this.set_tab_reorderable(term, true);
         }
 
         public void
@@ -131,7 +135,9 @@
         {
             var page = this.page_num(top_container);
             if (page != -1) {
+                var term = this.get_nth_page(page);
                 this.remove_page(page);
+                term.dispose();
             }
         }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/container.vala 
new/terminus-2.3.1/src/container.vala
--- old/terminus-2.1.0/src/container.vala       2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/container.vala       2023-04-17 15:23:46.000000000 
+0200
@@ -34,13 +34,13 @@
     public class Container : Gtk.Bin {
         public Terminus.Container ?container1;
         public Terminus.Container ?container2;
-        public Terminus.Notetab ?notetab;
+        public weak Terminus.Notetab ?notetab;
 
         private Terminus.Terminal ?terminal;
         private Terminus.PanedPercentage ?paned;
-        private Terminus.Container top_container;
-        private Terminus.Container upper_container;
-        private Terminus.Base main_container;
+        private weak Terminus.Container top_container;
+        private weak Terminus.Container upper_container;
+        private weak Terminus.Base main_container;
         private bool splited_horizontal;
         private string working_directory;
 
@@ -59,12 +59,11 @@
             this.working_directory = working_directory;
             this.main_container = main_container;
             this.upper_container = upper_container;
+            this.notetab = null;
             if (top_container == null) {
                 this.top_container = this;
-                this.notetab = new Terminus.Notetab(this.main_container, this);
             } else {
                 this.top_container = top_container;
-                this.notetab = null;
             }
 
             if (terminal == null) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/definitions.vala 
new/terminus-2.3.1/src/definitions.vala
--- old/terminus-2.1.0/src/definitions.vala     2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/definitions.vala     2023-04-17 15:23:46.000000000 
+0200
@@ -18,4 +18,5 @@
 namespace Terminus {
     public enum MoveFocus { UP, DOWN, LEFT, RIGHT }
     public enum SplitAt { TOP, LEFT, BOTTOM, RIGHT, NONE }
+    public enum EditingKeybindMode { NONE, KEYBIND, MACRO }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/keybinding.vala 
new/terminus-2.3.1/src/keybinding.vala
--- old/terminus-2.1.0/src/keybinding.vala      2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/keybinding.vala      2023-04-17 15:23:46.000000000 
+0200
@@ -45,7 +45,7 @@
             }
 
             
Gtk.accelerator_parse(Terminus.keybind_settings.get_string(this.name), out 
keyval, out state);
-            if (keyval < 128) {
+            if ((keyval >= 'a') && (keyval <= 'z')) {
                 keyval &= ~32;
             }
             this.keyval = keyval;
@@ -101,8 +101,12 @@
         {
             Gdk.EventKey eventkey = event.key;
             // SHIFT, CTRL, LEFT ALT, ALT+GR
-            eventkey.state &= Gdk.ModifierType.SHIFT_MASK | 
Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK |
-                              Gdk.ModifierType.MOD5_MASK;
+            eventkey.state &= Gdk.ModifierType.SHIFT_MASK |
+                              Gdk.ModifierType.CONTROL_MASK |
+                              Gdk.ModifierType.SUPER_MASK |
+                              Gdk.ModifierType.META_MASK |
+                              Gdk.ModifierType.HYPER_MASK |
+                              Gdk.ModifierType.MOD1_MASK;
 
             if (eventkey.keyval < 128) {
                 // to avoid problems with upper and lower case
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/macros.vala 
new/terminus-2.3.1/src/macros.vala
--- old/terminus-2.1.0/src/macros.vala  1970-01-01 01:00:00.000000000 +0100
+++ new/terminus-2.3.1/src/macros.vala  2023-04-17 15:23:46.000000000 +0200
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2023 (C) Raster Software Vigo (Sergio Costas)
+ *
+ * This file is part of Terminus
+ *
+ * Terminus is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License.
+ *
+ * Terminus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+using Gdk;
+
+namespace Terminus {
+    class Macro:Object {
+
+        private uint keyval;
+        private Gdk.ModifierType state;
+        private string command;
+
+        public Macro(string key, string command) {
+            uint             keyval;
+            Gdk.ModifierType state;
+
+            Gtk.accelerator_parse(key, out keyval, out state);
+            if ((keyval >= 'a') && (keyval <= 'z')) {
+                keyval &= ~32;
+            }
+
+            this.keyval = keyval;
+            this.state = state;
+            this.command = command;
+        }
+
+        public string? check_macro(Gdk.EventKey event) {
+            if ((this.keyval == event.keyval) && (this.state == event.state)) {
+                return this.command;
+            } else {
+                return null;
+            }
+        }
+    }
+
+    public class Macros:Object {
+        private Macro[] macro_list;
+
+        public Macros() {
+            Terminus.settings.changed.connect((key) => {
+                if (key == "macros") {
+                    this.update_macros();
+                }
+            });
+            this.update_macros();
+        }
+
+        public void update_macros() {
+            this.macro_list = {};
+            var macros = Terminus.settings.get_value("macros");
+            foreach(var entry in macros) {
+                var key = entry.get_child_value(0);
+                var command = entry.get_child_value(1);
+                var macro = new Macro(key.get_string(), command.get_string());
+                this.macro_list += macro;
+            }
+        }
+
+        public string? check_macro(Gdk.EventKey event) {
+            foreach(var macro in this.macro_list) {
+                var command = macro.check_macro(event);
+                if (command != null) {
+                    return command;
+                }
+            }
+            return null;
+        }
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/meson.build 
new/terminus-2.3.1/src/meson.build
--- old/terminus-2.1.0/src/meson.build  2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/src/meson.build  2023-04-17 15:23:46.000000000 +0200
@@ -4,7 +4,7 @@
 cfg_terminus.set('GETTEXT_PACKAGE', 'terminus')
 cfg_terminus.set('RELEASE_NAME', 'terminus')
 cfg_terminus.set('PREFIX', get_option('prefix'))
-cfg_terminus.set('VERSION', '2.1.0')
+cfg_terminus.set('VERSION', '2.3.1')
 cfg_terminus.set('TESTSRCDIR', meson.source_root())
 
 cfgfile_2 = configure_file(
@@ -14,11 +14,13 @@
 
 terminus_deps = [gdk_3_0_dep]
 terminus_deps += [gtk_3_0_dep]
+terminus_deps += [cairo_dep]
 terminus_deps += [gee_0_8_dep]
 terminus_deps += [gio_2_0_dep]
 terminus_deps += [gio_unix_2_0_dep]
 terminus_deps += [glib_2_0_dep]
 terminus_deps += [gobject_2_0_dep]
+terminus_deps += [harfbuzz_gobject_dep]
 terminus_deps += [keybinder_3_0_dep]
 terminus_deps += [pango_dep]
 terminus_deps += [vte_2_91_dep]
@@ -30,6 +32,7 @@
 terminus_sources += ['definitions.vala']
 terminus_sources += ['dndManager.vala']
 terminus_sources += ['keybinding.vala']
+terminus_sources += ['macros.vala']
 terminus_sources += ['notetab.vala']
 terminus_sources += ['palete.vala']
 terminus_sources += ['params.vala']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/notetab.vala 
new/terminus-2.3.1/src/notetab.vala
--- old/terminus-2.1.0/src/notetab.vala 2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/src/notetab.vala 2023-04-17 15:23:46.000000000 +0200
@@ -18,6 +18,7 @@
 using Vte;
 using Gtk;
 using Gdk;
+using Pango;
 
 namespace Terminus {
     /**
@@ -25,15 +26,17 @@
      */
 
     public class Notetab : Gtk.EventBox, Killable, DnDDestination {
-        private Terminus.Container top_container;
+        private weak Terminus.Container top_container;
         private Gtk.Label title;
-        private Terminus.Base main_container;
+        private weak Terminus.Base main_container;
         private Gtk.Box inner_box;
         private uint timeout_id;
+        private string current_title;
 
         public Notetab(Terminus.Base      main_container,
                        Terminus.Container top_container)
         {
+            this.current_title = "";
             this.main_container = main_container;
             this.top_container = top_container;
             this.top_container.close_tab.connect(() => {
@@ -68,6 +71,11 @@
                 Terminus.dnd_manager.set_destination(this);
                 return true;
             });
+            Terminus.settings.changed.connect((name) => {
+                if (name == "max-tab-text-len") {
+                    this.update_title();
+                }
+            });
         }
 
         public void
@@ -105,7 +113,17 @@
         public void
         change_title(string new_title)
         {
-            this.title.label = new_title;
+            this.current_title = new_title;
+            this.update_title();
+        }
+
+        private void update_title() {
+            var max_title_len = Terminus.settings.get_int("max-tab-text-len");
+            if (this.current_title.length > max_title_len) {
+                this.title.label = "..." + 
this.current_title.substring(this.current_title.length - max_title_len);
+            } else {
+                this.title.label = this.current_title;
+            }
         }
 
         public bool
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/settings.vala 
new/terminus-2.3.1/src/settings.vala
--- old/terminus-2.1.0/src/settings.vala        2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/settings.vala        2023-04-17 15:23:46.000000000 
+0200
@@ -122,15 +122,24 @@
         private Gtk.ListStore keybindings;
         private Gtk.Entry custom_shell;
 
-        private bool editing_keybind;
+        private EditingKeybindMode editing_keybind;
         private bool changing_guake;
         private string old_keybind;
         private Gtk.TreePath old_keybind_path;
         private bool disable_palette_change;
 
+        private Gtk.TreeView macros_view;
+        private Gtk.ListStore macros_store;
+        private Gtk.Button add_macro;
+        private Gtk.Button delete_macro;
+        private Gtk.Entry macro_keybinding;
+        private Gtk.Entry macro_command;
+        private string? selected_key;
+
         public Properties()
         {
-            this.editing_keybind = false;
+            this.selected_key = null;
+            this.editing_keybind = EditingKeybindMode.NONE;
             disable_palette_change = false;
 
             this.delete_event.connect((w) => {
@@ -141,7 +150,7 @@
             var      main_window = new Gtk.Builder();
             string[] elements =
             { "properties_notebook", "color_schemes", "palette_schemes", 
"scroll_lines", "transparency_level",
-              "cursor_liststore" };
+              "cursor_liststore", "macros_store", "macro_keybinding", 
"macro_command", "add_macro", "delete_macro" };
             
main_window.add_objects_from_resource("/com/rastersoft/terminus/interface/properties.ui",
 elements);
             this.add(main_window.get_object("properties_notebook") as 
Gtk.Widget);
 
@@ -180,6 +189,54 @@
             this.palette_scheme = main_window.get_object("palette_scheme") as 
Gtk.ComboBox;
             this.palette_schemes = main_window.get_object("palette_schemes") 
as Gtk.ListStore;
             this.cursor_shape = main_window.get_object("cursor_shape") as 
Gtk.ComboBox;
+            this.macros_store = main_window.get_object("macros_store") as 
Gtk.ListStore;
+            this.macros_view = main_window.get_object("macros_view") as 
Gtk.TreeView;
+            this.macro_keybinding = main_window.get_object("macro_keybinding") 
as Gtk.Entry;
+            this.macro_command = main_window.get_object("macro_command") as 
Gtk.Entry;
+            this.add_macro = main_window.get_object("add_macro") as Gtk.Button;
+            this.delete_macro = main_window.get_object("delete_macro") as 
Gtk.Button;
+
+            this.macro_command.changed.connect(() => {
+                this.update_macro_state();
+            });
+            this.macro_command.activate.connect(() => {
+                this.add_macro_to_config();
+            });
+            this.macro_keybinding.changed.connect(() => {
+                this.update_macro_state();
+            });
+            this.macro_keybinding.focus_in_event.connect(() => {
+                this.editing_keybind = EditingKeybindMode.MACRO;
+                return false;
+            });
+            this.macro_keybinding.key_press_event.connect((ev) => {
+                if (this.on_key_press(ev)) {
+                    this.focus(DirectionType.RIGHT);
+                }
+                return true;
+            });
+            this.add_macro.clicked.connect(() => {
+                this.add_macro_to_config();
+            });
+            this.delete_macro.clicked.connect(() => {
+                if (this.selected_key == null) {
+                    return;
+                }
+                GLib.Variant[] entries = {};
+                foreach(var entry in Terminus.settings.get_value("macros")) {
+                    if (entry.get_child_value(0).get_string() != 
this.selected_key) {
+                        entries += entry;
+                    }
+                }
+                var new_settings = new GLib.Variant.array(new 
GLib.VariantType("(sss)"), entries);
+                Terminus.settings.set_value("macros", new_settings);
+                this.selected_key = null;
+                this.update_macros_list();
+            });
+
+            this.add_macro.sensitive = false;
+            this.delete_macro.sensitive = false;
+
             this.palette_colors = {};
             string[] palette_string = 
Terminus.settings.get_strv("color-palete");
             var      tmpcolor = Gdk.RGBA();
@@ -314,21 +371,88 @@
             }
             this.palette_scheme.set_active(this.get_current_palette());
 
+            macros_view.activate_on_single_click = true;
+            macros_view.row_activated.connect(this.keymacro_clicked_cb);
+
+            this.update_macros_list();
+
             this.keybindings = new Gtk.ListStore(3, typeof(string), 
typeof(string), typeof(string));
             foreach (var kb in Terminus.key_bindings.key_binding_list) {
                 this.add_keybinding(kb.description, kb.name);
             }
-
             var keybindings_view = main_window.get_object("keybindings") as 
Gtk.TreeView;
             keybindings_view.activate_on_single_click = true;
             keybindings_view.row_activated.connect(this.keybind_clicked_cb);
             keybindings_view.set_model(this.keybindings);
-            Gtk.CellRendererText cell = new Gtk.CellRendererText();
+            var cell = new Gtk.CellRendererText();
             keybindings_view.insert_column_with_attributes(-1, _("Action"), 
cell, "text", 0);
             keybindings_view.insert_column_with_attributes(-1, _("Key"), cell, 
"text", 1);
 
             this.events = Gdk.EventMask.KEY_PRESS_MASK;
-            this.key_press_event.connect(this.on_key_press);
+            keybindings_view.key_press_event.connect((event) => {
+                this.on_key_press(event);
+                return false;
+            });
+        }
+
+        private void
+        update_macros_list()
+        {
+            var macros = Terminus.settings.get_value("macros");
+            int counter = 0;
+            this.macros_store.clear();
+            foreach(var entry in macros) {
+                Gtk.TreeIter iter;
+                this.macros_store.append(out iter);
+                var key = GLib.Value(typeof(string));
+                var key_string = entry.get_child_value(0).get_string();
+                key.set_string(key_string);
+                var command = GLib.Value(typeof(string));
+                var command_string = entry.get_child_value(1).get_string();
+                command.set_string(command_string);
+                var program = GLib.Value(typeof(string));
+                var program_string = entry.get_child_value(2).get_string();
+                program.set_string(program_string);
+                this.macros_store.set_value(iter, 0, key);
+                this.macros_store.set_value(iter, 1, command);
+                counter++;
+            }
+            this.selected_key = null;
+            this.macro_keybinding.text = "";
+            this.macro_command.text = "";
+            this.update_macro_state();
+        }
+
+        private void
+        add_macro_to_config()
+        {
+            var keybind = this.macro_keybinding.text;
+            var command = this.macro_command.text;
+
+            if ((keybind == "") || (command == "")) {
+                return;
+            }
+
+            var new_entry = new GLib.Variant("(sss)", keybind, command, "");
+
+            GLib.Variant[] entries = {};
+            bool found = false;
+            foreach(var entry in Terminus.settings.get_value("macros")) {
+                if (entry.get_child_value(0).get_string() == keybind) {
+                    entries += new_entry;
+                    found = true;
+                } else {
+                    entries += entry;
+                }
+            }
+            if (found == false) {
+                entries += new_entry;
+            }
+            var new_settings = new GLib.Variant.array(null, entries);
+            Terminus.settings.set_value("macros", new_settings);
+            this.macro_keybinding.text = "";
+            this.macro_command.text = "";
+            this.update_macros_list();
         }
 
         private void
@@ -404,6 +528,43 @@
             this.keybindings.set(iter, 0, name, 1, 
Terminus.keybind_settings.get_string(setting), 2, setting);
         }
 
+
+        public void
+        keymacro_clicked_cb(TreePath       path,
+                            TreeViewColumn column)
+        {
+            Gtk.TreeIter iter;
+            GLib.Value   val;
+
+            this.macros_store.get_iter(out iter, path);
+            this.macros_store.get_value(iter, 0, out val);
+            this.macro_keybinding.set_text(val.get_string());
+            this.selected_key = val.get_string();
+            this.macros_store.get_value(iter, 1, out val);
+            this.macro_command.set_text(val.get_string());
+            this.update_macro_state();
+        }
+
+        private void
+        update_macro_state()
+        {
+            TreePath? path;
+            TreeViewColumn? column;
+
+            this.macros_view.get_cursor(out path, out column);
+            if (path == null) {
+                this.delete_macro.sensitive = false;
+            } else {
+                this.delete_macro.sensitive = true;
+            }
+
+            if ((this.macro_command.text != "") && (this.macro_keybinding.text 
!= "")) {
+                this.add_macro.sensitive = true;
+            } else {
+                this.add_macro.sensitive = false;
+            }
+        }
+
         public void
         keybind_clicked_cb(TreePath       path,
                            TreeViewColumn column)
@@ -411,15 +572,15 @@
             Gtk.TreeIter iter;
             GLib.Value   val;
 
-            if (this.editing_keybind) {
-                this.editing_keybind = false;
+            if (this.editing_keybind != EditingKeybindMode.NONE) {
+                this.editing_keybind = EditingKeybindMode.NONE;
                 this.keybindings.get_iter(out iter, this.old_keybind_path);
                 this.keybindings.set(iter, 1, this.old_keybind);
                 if (this.changing_guake) {
                     Terminus.keybind_settings.set_string("guake-mode", 
old_keybind);
                 }
             } else {
-                this.editing_keybind = true;
+                this.editing_keybind = EditingKeybindMode.KEYBIND;
                 this.keybindings.get_iter(out iter, path);
                 this.keybindings.get_value(iter, 1, out val);
                 this.old_keybind = val.get_string();
@@ -438,7 +599,7 @@
         public bool
         on_key_press(Gdk.EventKey eventkey)
         {
-            if (this.editing_keybind == false) {
+            if (this.editing_keybind == EditingKeybindMode.NONE) {
                 return false;
             }
 
@@ -462,27 +623,36 @@
                 break;
             }
 
-            this.editing_keybind = false;
-
-            eventkey.state &= 0x07;
+            // avoid mod2 and other odd mods
+            eventkey.state &= Gdk.ModifierType.SHIFT_MASK |
+                              Gdk.ModifierType.CONTROL_MASK |
+                              Gdk.ModifierType.SUPER_MASK |
+                              Gdk.ModifierType.META_MASK |
+                              Gdk.ModifierType.HYPER_MASK |
+                              Gdk.ModifierType.MOD1_MASK;
 
-            if ((eventkey.keyval >= 97) && (eventkey.keyval <= 122)) {
+            if ((eventkey.keyval >= 'a') && (eventkey.keyval <= 'z')) {
                 eventkey.keyval &= ~32;
             }
 
             var new_keybind = Gtk.accelerator_name(eventkey.keyval, 
eventkey.state);
 
-            Gtk.TreeIter iter;
-            Value        val;
+            if (this.editing_keybind == EditingKeybindMode.KEYBIND) {
+                Gtk.TreeIter iter;
+                Value        val;
 
-            this.editing_keybind = false;
-            this.keybindings.get_iter(out iter, this.old_keybind_path);
-            this.keybindings.set(iter, 1, new_keybind);
-            this.keybindings.get_value(iter, 2, out val);
-            var key = val.get_string();
-            Terminus.keybind_settings.set_string(key, new_keybind);
+                this.keybindings.get_iter(out iter, this.old_keybind_path);
+                this.keybindings.set(iter, 1, new_keybind);
+                this.keybindings.get_value(iter, 2, out val);
+                var key = val.get_string();
+                Terminus.keybind_settings.set_string(key, new_keybind);
+            } else {
+                // macro
+                this.macro_keybinding.text = new_keybind;
+            }
 
-            return false;
+            this.editing_keybind = EditingKeybindMode.NONE;
+            return true;
         }
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/terminal.vala 
new/terminus-2.3.1/src/terminal.vala
--- old/terminus-2.1.0/src/terminal.vala        2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/terminal.vala        2023-04-17 15:23:46.000000000 
+0200
@@ -35,9 +35,9 @@
         private Gtk.EventBox closeButton;
         private Gtk.MenuItem item_copy;
         private Gtk.Menu menu_container;
-        private Terminus.Container top_container;
-        private Terminus.Container container;
-        private Terminus.Base main_container;
+        private weak Terminus.Container top_container;
+        private weak Terminus.Container container;
+        private weak Terminus.Base main_container;
         private Gtk.Scrollbar right_scroll;
         private double title_r;
         private double title_g;
@@ -321,6 +321,7 @@
                     });
                 }
             });
+            this.vte_terminal.allow_hyperlink = true;
 
             Terminus.settings.bind("scroll-on-output",
                                    this.vte_terminal,
@@ -708,8 +709,12 @@
         {
             Gdk.EventKey eventkey = event.key;
             // SHIFT, CTRL, LEFT ALT, ALT+GR
-            eventkey.state &= Gdk.ModifierType.SHIFT_MASK | 
Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.MOD1_MASK |
-                              Gdk.ModifierType.MOD5_MASK;
+            eventkey.state &= Gdk.ModifierType.SHIFT_MASK |
+                              Gdk.ModifierType.CONTROL_MASK |
+                              Gdk.ModifierType.SUPER_MASK |
+                              Gdk.ModifierType.META_MASK |
+                              Gdk.ModifierType.HYPER_MASK |
+                              Gdk.ModifierType.MOD1_MASK;
 
             if (eventkey.keyval < 128) {
                 // to avoid problems with upper and lower case
@@ -793,10 +798,14 @@
             case "select-all":
                 this.vte_terminal.select_all();
                 return true;
+            }
 
-            default:
-                return false;
+            var command = Terminus.macros.check_macro(eventkey);
+            if (command != null) {
+                this.vte_terminal.feed_child((uint8[])command.to_utf8());
+                return true;
             }
+            return false;
         }
 
         private void
@@ -849,6 +858,10 @@
                 this.vte_terminal.font_scale = 1;
                 return true;
             }
+            if ((event.button == 1) && (this.vte_terminal.hyperlink_hover_uri 
!= null)) {
+                
GLib.AppInfo.launch_default_for_uri(this.vte_terminal.hyperlink_hover_uri, 
null);
+                return true;
+            }
             return false;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/src/terminus.vala 
new/terminus-2.3.1/src/terminus.vala
--- old/terminus-2.1.0/src/terminus.vala        2023-01-28 13:03:57.000000000 
+0100
+++ new/terminus-2.3.1/src/terminus.vala        2023-04-17 15:23:46.000000000 
+0200
@@ -23,6 +23,7 @@
     TerminusRoot     main_root;
     DnDManager       dnd_manager;
     KeyBindings      key_bindings;
+    Macros           macros;
     GLib.Settings    settings = null;
     GLib.Settings    keybind_settings = null;
     Terminus.Bindkey bindkey;
@@ -94,6 +95,7 @@
         do_startup()
         {
             Terminus.key_bindings = new Terminus.KeyBindings();
+            Terminus.macros = new Terminus.Macros();
             
this.read_color_schemes(GLib.Path.build_filename(Constants.DATADIR, 
"terminus"));
             
this.read_color_schemes(GLib.Path.build_filename(Environment.get_home_dir(),
                                                              ".local",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/terminus.avprj 
new/terminus-2.3.1/terminus.avprj
--- old/terminus-2.1.0/terminus.avprj   2023-01-28 13:03:57.000000000 +0100
+++ new/terminus-2.3.1/terminus.avprj   2023-04-17 15:23:46.000000000 +0200
@@ -1,7 +1,7 @@
 ### AutoVala Project ###
 autovala_version: 30
 project_name: terminus
-project_version: 2.1.0
+project_version: 2.3.1
 vala_version: 0.30
 
 custom: terminus_gnome_shell/extension.js 
share/gnome-shell/extensions/showterminusquakewin...@rastersoft.com
@@ -12,17 +12,19 @@
 *vapidir: src/vapidir
 
 vala_binary: src/terminus
-*version: 2.1.0
+*version: 2.3.1
 use_gresource: extras_gresource_xml
 vala_vapi: checkwayland.vapi
 *vala_package: posix
 vala_check_package: gdk-3.0
 vala_check_package: gtk+-3.0
+*vala_check_package: cairo
 *vala_check_package: gee-0.8
 *vala_check_package: gio-2.0
 *vala_check_package: gio-unix-2.0
 *vala_check_package: glib-2.0
 *vala_check_package: gobject-2.0
+*vala_check_package: harfbuzz-gobject
 *vala_check_package: keybinder-3.0
 *vala_check_package: pango
 *vala_check_package: vte-2.91
@@ -33,6 +35,7 @@
 *vala_source: definitions.vala
 *vala_source: dndManager.vala
 *vala_source: keybinding.vala
+*vala_source: macros.vala
 *vala_source: notetab.vala
 *vala_source: palete.vala
 *vala_source: params.vala
@@ -54,6 +57,7 @@
 *translate: vala src/definitions.vala
 *translate: vala src/dndManager.vala
 *translate: vala src/keybinding.vala
+*translate: vala src/macros.vala
 *translate: vala src/notetab.vala
 *translate: vala src/palete.vala
 *translate: vala src/params.vala
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/terminus_gnome_shell/extension.js 
new/terminus-2.3.1/terminus_gnome_shell/extension.js
--- old/terminus-2.1.0/terminus_gnome_shell/extension.js        2023-01-28 
13:03:57.000000000 +0100
+++ new/terminus-2.3.1/terminus_gnome_shell/extension.js        2023-04-17 
15:23:46.000000000 +0200
@@ -166,12 +166,10 @@
        _set_window_position(window) {
                let area = window.get_work_area_current_monitor();
                let guake_height = this._settings2.get_int("guake-height");
-               global.log(`Antiguo tamaño: ${guake_height}`);
                if (guake_height >= area.height) {
                        guake_height = Math.round(area.height * 2 / 3);
                        this._settings2.set_int("guake-height", guake_height);
                }
-               global.log(`Nuevo tamaño: ${guake_height}`);
                window.move_resize_frame(false, area.x, area.y, area.width, 
guake_height);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/terminus-2.1.0/terminus_gnome_shell/metadata.json 
new/terminus-2.3.1/terminus_gnome_shell/metadata.json
--- old/terminus-2.1.0/terminus_gnome_shell/metadata.json       2023-01-28 
13:03:57.000000000 +0100
+++ new/terminus-2.3.1/terminus_gnome_shell/metadata.json       2023-04-17 
15:23:46.000000000 +0200
@@ -1,5 +1,5 @@
 {"uuid": "showterminusquakewin...@rastersoft.com",
 "name": "Show Terminus Quake Mode",
-"shell-version": ["3.22", "3.24", "3.26", "3.28", "3.36", "3.38", "40", "41", 
"42", "43"],
+"shell-version": ["3.22", "3.24", "3.26", "3.28", "3.36", "3.38", "40", "41", 
"42", "43", "44"],
 "session-modes": ["user", "unlock-dialog"],
 "description": "Allows to show the Quake-like terminal from Terminus by 
pressing the defined hotkey. Useful when using Wayland, since there Terminus 
can't create hotkeys and must rely on the desktop."}

Reply via email to