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."}