Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package zutty for openSUSE:Factory checked 
in at 2024-01-31 23:55:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/zutty (Old)
 and      /work/SRC/openSUSE:Factory/.zutty.new.1815 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "zutty"

Wed Jan 31 23:55:03 2024 rev:4 rq:1142985 version:0.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/zutty/zutty.changes      2023-03-25 
18:56:01.850875470 +0100
+++ /work/SRC/openSUSE:Factory/.zutty.new.1815/zutty.changes    2024-01-31 
23:55:25.060599586 +0100
@@ -1,0 +2,7 @@
+Mon Jan 29 13:47:31 UTC 2024 - Andrea Manzini <andrea.manz...@suse.com>
+
+- Update to 0.15:
+  * Implement DECSCUSR (w/o blinking): block, bar & underline cursors
+  * Add XTQMODKEYS (partial, only for supporting modifyOtherKeys) 
+
+-------------------------------------------------------------------

Old:
----
  zutty-0.14.tar.gz

New:
----
  zutty-0.15.tar.gz
  zutty-0.15.tar.gz.asc

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

Other differences:
------------------
++++++ zutty.spec ++++++
--- /var/tmp/diff_new_pack.M4ZZbJ/_old  2024-01-31 23:55:26.388647509 +0100
+++ /var/tmp/diff_new_pack.M4ZZbJ/_new  2024-01-31 23:55:26.388647509 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package zutty
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           zutty
-Version:        0.14
+Version:        0.15
 Release:        0
 Summary:        Terminal program with GLES renderer and low latency
 License:        GPL-3.0-or-later
@@ -25,7 +25,8 @@
 URL:            https://tomscii.sig7.se/zutty/
 #Git-Clone:     https://github.com/tomscii/zutty
 #Git-Clone:     https://github.com/tomscii/zutty.wiki
-Source:         
https://github.com/tomscii/zutty/archive/refs/tags/%{version}.tar.gz#/zutty-%version.tar.gz
+Source:         zutty-0.15.tar.gz
+Source1:        zutty-0.15.tar.gz.asc
 Source3:        FAQ.md
 # Note: Tumbleweed contains waf, but Leap does not (yet), so we use python3 
and add waf to the sources.
 BuildRequires:  Mesa-libEGL-devel
@@ -44,7 +45,7 @@
 fonts by their usual names. (See FAQ for details.)
 
 %prep
-%autosetup
+%autosetup -n %{name}-%{version}
 cp -a "%{_sourcedir}/FAQ.md" .
 
 %build

++++++ zutty-0.14.tar.gz -> zutty-0.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/README.md new/zutty-0.15/README.md
--- old/zutty-0.14/README.md    1970-01-01 01:00:00.000000000 +0100
+++ new/zutty-0.15/README.md    2024-01-19 21:07:08.000000000 +0100
@@ -0,0 +1,8 @@
+## Zutty - Zero-cost Unicode Teletype
+
+Before coming into serious contact with Zutty (e.g., reporting a bug,
+*asking for anything*), all the below pages are **required reading**:
+
+- [README](https://tomscii.sig7.se/zutty)
+- [User guide](https://tomscii.sig7.se/zutty/doc/USAGE.html)
+- [Frequently Asked Questions](https://tomscii.sig7.se/zutty/wiki/FAQ.html)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/README.org new/zutty-0.15/README.org
--- old/zutty-0.14/README.org   2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/README.org   2024-01-19 21:07:08.000000000 +0100
@@ -6,7 +6,7 @@
 *A high-end terminal for low-end systems*
 
 Homepage: https://tomscii.sig7.se/zutty \\
-Source: https://github.com/tomscii/zutty
+Source: https://git.hq.sig7.se/zutty.git
 #+END_CENTER
 
 Zutty is a terminal emulator for the X Window System, functionally
@@ -33,6 +33,7 @@
 
 Core documentation (bundled with the Zutty sources):
 
+- [[./README.org][README]]: general overview (this document)
 - [[./doc/USAGE.org][User guide]]: guide and reference for all users
 - [[./doc/HACKING.org][Developer guide]]: internals, debugging, testing, 
contributing
 - [[./doc/KEYS.org][Key mapping sequences]]: reference on keyboard-induced 
sequences
@@ -40,8 +41,8 @@
 
 More about Zutty:
 
-- [[https://github.com/tomscii/zutty/wiki/Screenshots][Screenshots]]: Zutty in 
action
-- [[https://github.com/tomscii/zutty/wiki/FAQ][FAQ]]: What you never thought 
you'd need to know about Zutty
+- [[https://tomscii.sig7.se/zutty/wiki/Screenshots.html][Screenshots]]: Zutty 
in action
+- [[https://tomscii.sig7.se/zutty/wiki/FAQ.html][Frequently Asked Questions]]: 
What you never thought you'd need to know about Zutty
 - [[https://tomscii.sig7.se/2020/11/How-Zutty-works][How Zutty works]]: 
Rendering a terminal with an OpenGL Compute Shader
 - [[https://tomscii.sig7.se/2020/12/A-totally-biased-comparison-of-Zutty][A 
totally biased comparison of Zutty]] (to some better-known X terminal emulators)
 - [[https://tomscii.sig7.se/2021/01/Typing-latency-of-Zutty][Measured: Typing 
latency of Zutty]] (compared to others)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/doc/USAGE.org new/zutty-0.15/doc/USAGE.org
--- old/zutty-0.14/doc/USAGE.org        2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/doc/USAGE.org        2024-01-19 21:07:08.000000000 +0100
@@ -27,20 +27,14 @@
 ** 2. Obtain the source
 
 Clone the source from git:
-: git clone https://github.com/tomscii/zutty.git
+: git clone https://git.hq.sig7.se/zutty.git
 : cd zutty
 
-Alternatively, to download a compressed tarball of a certain release
-version, go to https://github.com/tomscii/zutty/releases, download
-the tarball you want (we recommend the latest one), and uncompress it.
-Further steps assume that your working directory is within the
-uncompressed directory, so =cd= into it!
-
 ** 3. Configure the source
 
-You are supposed to be inside the repository (or release) directory
-structure, i.e., the =zutty= directory created above should be your
-working directory. Issue this command:
+You are supposed to be inside the repository directory structure,
+i.e., the =zutty= directory created above should be your working
+directory. Issue this command:
 
 : ./waf configure
 
@@ -152,6 +146,7 @@
 | =DISPLAY=            | Set to the current X display.                         
                                                                      |
 | =SHELL=              | Set to the full (resolved) pathname of the shell 
being run; unset if the program is not a valid shell as per =/etc/shells=. |
 | =TERM=               | Set to =xterm-256color=.                              
                                                                      |
+| =COLORTERM=          | Set to =truecolor=.                                   
                                                                      |
 | =WINDOWID=           | Set to the current X window id of the Zutty window.   
                                                                      |
 | =ZUTTY_VERSION=      | Set to the build version of Zutty.                    
                                                                      |
 * Configuration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/icons/zutty.desktop 
new/zutty-0.15/icons/zutty.desktop
--- old/zutty-0.14/icons/zutty.desktop  2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/icons/zutty.desktop  2024-01-19 21:07:08.000000000 +0100
@@ -1,6 +1,5 @@
 [Desktop Entry]
 Type=Application
-Encoding=UTF-8
 Name=Zutty
 Comment=Zero-cost Unicode Teletype
 Exec=zutty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/charvdev.cc 
new/zutty-0.15/src/charvdev.cc
--- old/zutty-0.14/src/charvdev.cc      2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/charvdev.cc      2024-01-19 21:07:08.000000000 +0100
@@ -210,22 +210,46 @@
       }
    }
 
-   if (charPos == cursorPos.xy && cursorStyle == 2)
+   if (charPos == cursorPos.xy)
    {
       vec4 pixel = vec4 (crColor, 1.0);
-      for (int j = 0; j < srcGlyphPixels.x; j++)
+      if (cursorStyle == 2)
       {
-         ivec2 pxCoords = charPos * glyphPixels + ivec2 (j, 0);
-         imageStore (imgOut, pxCoords, pixel);
-         pxCoords += ivec2 (0, srcGlyphPixels.y - 1);
-         imageStore (imgOut, pxCoords, pixel);
+         for (int j = 0; j < srcGlyphPixels.x; j++)
+         {
+            ivec2 pxCoords = charPos * glyphPixels + ivec2 (j, 0);
+            imageStore (imgOut, pxCoords, pixel);
+            pxCoords += ivec2 (0, srcGlyphPixels.y - 1);
+            imageStore (imgOut, pxCoords, pixel);
+         }
+         for (int k = 1; k < srcGlyphPixels.y - 1; k++)
+         {
+            ivec2 pxCoords = charPos * glyphPixels + ivec2 (0, k);
+            imageStore (imgOut, pxCoords, pixel);
+            pxCoords += ivec2 (srcGlyphPixels.x - 1, 0);
+            imageStore (imgOut, pxCoords, pixel);
+         }
       }
-      for (int k = 1; k < srcGlyphPixels.y - 1; k++)
+      else if (cursorStyle == 3)
       {
-         ivec2 pxCoords = charPos * glyphPixels + ivec2 (0, k);
-         imageStore (imgOut, pxCoords, pixel);
-         pxCoords += ivec2 (srcGlyphPixels.x - 1, 0);
-         imageStore (imgOut, pxCoords, pixel);
+         int hoffset = srcGlyphPixels.y - 2;
+         for (int j = 0; j < srcGlyphPixels.x; j++)
+         {
+            ivec2 pxCoords = charPos * glyphPixels + ivec2 (j, hoffset);
+            imageStore (imgOut, pxCoords, pixel);
+            pxCoords += ivec2 (0, 1);
+            imageStore (imgOut, pxCoords, pixel);
+         }
+      }
+      else if (cursorStyle == 4)
+      {
+         for (int k = 0; k < srcGlyphPixels.y; k++)
+         {
+            ivec2 pxCoords = charPos * glyphPixels + ivec2 (0, k);
+            imageStore (imgOut, pxCoords, pixel);
+            pxCoords += ivec2 (1, 0);
+            imageStore (imgOut, pxCoords, pixel);
+         }
       }
    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/charvdev.h 
new/zutty-0.15/src/charvdev.h
--- old/zutty-0.14/src/charvdev.h       2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/charvdev.h       2024-01-19 21:07:08.000000000 +0100
@@ -98,7 +98,9 @@
          {
             hidden = 0,
             filled_block = 1,
-            hollow_block = 2
+            hollow_block = 2,
+            underline = 3,
+            bar = 4,
          };
          Style style = Style::hidden;
       };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/font.cc new/zutty-0.15/src/font.cc
--- old/zutty-0.14/src/font.cc  2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/font.cc  2024-01-19 21:07:08.000000000 +0100
@@ -326,10 +326,12 @@
 
       if (overlay) // clear glyph area, as we are overwriting an existing glyph
       {
-         for (int j = 0; j < bh; ++j) {
+         for (int j = 0; j < py; ++j)
+         {
             uint8_t* atl_dst_row =
                atlasBuf.data () + atlas_glyph_offset + j * nx * px;
-            for (int k = 0; k < bw; ++k) {
+            for (int k = 0; k < px; ++k)
+            {
                *atl_dst_row++ = 0;
             }
          }
@@ -349,11 +351,13 @@
       switch (bmp.pixel_mode)
       {
       case FT_PIXEL_MODE_MONO:
-         for (int j = sh; j < bh; ++j) {
+         for (int j = sh; j < bh; ++j)
+         {
             bmp_src_row = bmp.buffer + j * bmp.pitch;
             atl_dst_row = atlasBuf.data () + atlas_write_offset + j * nx * px;
             uint8_t byte = 0;
-            for (int k = 0; k < bw; ++k) {
+            for (int k = 0; k < bw; ++k)
+            {
                if (k % 8 == 0)
                   byte = *bmp_src_row++;
                if (k >= sw)
@@ -363,10 +367,12 @@
          }
          break;
       case FT_PIXEL_MODE_GRAY:
-         for (int j = sh; j < bh; ++j) {
+         for (int j = sh; j < bh; ++j)
+         {
             bmp_src_row = bmp.buffer + j * bmp.pitch + sw;
             atl_dst_row = atlasBuf.data () + atlas_write_offset + j * nx * px;
-            for (int k = sw; k < bw; ++k) {
+            for (int k = sw; k < bw; ++k)
+            {
                *atl_dst_row++ = *bmp_src_row++;
             }
          }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/main.cc new/zutty-0.15/src/main.cc
--- old/zutty-0.14/src/main.cc  2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/main.cc  2024-01-19 21:07:08.000000000 +0100
@@ -108,6 +108,29 @@
 }
 
 static void
+setUtf8prop (const char* prop_name, const std::string & value)
+{
+   Atom utf8 = XInternAtom (xDisplay, "UTF8_STRING", false);
+   Atom prop = XInternAtom (xDisplay, prop_name, false);
+   XChangeProperty (xDisplay, xWindow, prop, utf8, 8, PropModeReplace,
+                    (const unsigned char*) value.data (), value.size ());
+}
+
+static void
+setXWindowName (const std::string & name)
+{
+   XStoreName (xDisplay, xWindow, name.c_str ());
+   setUtf8prop ("_NET_WM_NAME", name);
+}
+
+static void
+setXWindowIconName (const std::string & name)
+{
+   XSetIconName (xDisplay, xWindow, name.c_str ());
+   setUtf8prop ("_NET_WM_ICON_NAME", name);
+}
+
+static void
 makeXWindow (const char* name, int width, int height, int px, int py,
              EGLDisplay eglDpy, EGLContext& eglCtx, EGLSurface& eglSurface)
 {
@@ -199,6 +222,12 @@
    }
 
    {
+      std::string title {name};
+      setXWindowName (title);
+      setXWindowIconName (title);
+   }
+
+   {
       // set NET_WM_PID to the process ID to link the window to the pid
       Atom _NET_WM_PID = XInternAtom (xDisplay, "_NET_WM_PID", false);
       pid_t pid = getpid ();
@@ -410,6 +439,9 @@
       if (setenv ("TERM", "xterm-256color", 1) < 0)
          SYS_ERROR ("setenv TERM");
 
+      if (setenv ("COLORTERM", "truecolor", 1) < 0)
+         SYS_ERROR ("setenv COLORTERM");
+
       if (execvp (execPath, (char * const *) argv) < 0)
          SYS_ERROR ("execvp of ", execPath);
    }
@@ -493,7 +525,7 @@
       selMgr->getSelection (selMgr->getClipboard (), xkevt.time, pasteCb);
       return false;
    }
-   if ((ks == XK_Insert || ks == XK_KP_Insert) && mod == VtModifier::shift)
+   if (ks == XK_Insert && mod == VtModifier::shift)
    {
       selMgr->getSelection (selMgr->getPrimary (), xkevt.time, pasteCb);
       return false;
@@ -1086,14 +1118,14 @@
    switch (cmd)
    {
    case 0: // Change Icon Name & Window Title
-      XStoreName (xDisplay, xWindow, arg.c_str ());
-      XSetIconName (xDisplay, xWindow, arg.c_str ());
+      setXWindowName (arg);
+      setXWindowIconName (arg);
       break;
    case 1: // Change Icon Name
-      XSetIconName (xDisplay, xWindow, arg.c_str ());
+      setXWindowIconName (arg);
       break;
    case 2: // Change Window Title
-      XStoreName (xDisplay, xWindow, arg.c_str ());
+      setXWindowName (arg);
       break;
    case 52: // Manipulate Selection Data
    {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/options.h new/zutty-0.15/src/options.h
--- old/zutty-0.14/src/options.h        2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/options.h        2024-01-19 21:07:08.000000000 +0100
@@ -39,6 +39,8 @@
 
 #if defined(FREEBSD)
    static constexpr const char* fontpath = "/usr/local/share/fonts";
+#elif defined(NETBSD)
+   static constexpr const char* fontpath = "/usr/X11R7/lib/X11/fonts";
 #elif defined(OPENBSD)
    static constexpr const char* fontpath = "/usr/X11R6/lib/X11/fonts";
 #else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/vterm.cc new/zutty-0.15/src/vterm.cc
--- old/zutty-0.14/src/vterm.cc 2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/vterm.cc 2024-01-19 21:07:08.000000000 +0100
@@ -588,6 +588,8 @@
       , frame_pri (winPx, winPy, nCols, nRows, marginTop, marginBottom,
                    opts.saveLines)
       , cf (&frame_pri)
+      , rgb_fg (opts.fg)
+      , rgb_bg (opts.bg)
       , utf8dec ([this] () { placeGraphicChar (); })
       , nColsEff (nCols)
       , hMargin (0)
@@ -1339,6 +1341,7 @@
             {
             case '@': csi_ecma48_SL (); break;
             case 'A': csi_ecma48_SR (); break;
+            case 'q': csi_DECSCUSR (); break;
             IGNORE_SEQUENCE_ON_BAD_PARAMS;
             default: unhandledInput (ch); break;
             }
@@ -1360,6 +1363,7 @@
             case '\e': setState (InputState::Normal); break;
             case 'h': csi_privSM (); break;
             case 'l': csi_privRM (); break;
+            case 'm': csi_XTQMODKEYS (); break;
             IGNORE_SEQUENCE_ON_BAD_PARAMS;
             default: unhandledInput (ch); break;
             }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/vterm.h new/zutty-0.15/src/vterm.h
--- old/zutty-0.14/src/vterm.h  2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/vterm.h  2024-01-19 21:07:08.000000000 +0100
@@ -297,6 +297,7 @@
 
       void csi_ecma48_SL (); // Shift Left
       void csi_ecma48_SR (); // Shift Right
+      void csi_DECSCUSR ();  // Set cursor style
 
       void csi_priDA ();     // Device Attributes (Primary)
       void csi_secDA ();     // Device Attributes (Secondary)
@@ -306,7 +307,8 @@
       void handle_OSC ();    // Operating System Command
       void csiq_DECSCL ();   // DEC Set Compatibility Level
       void csi_XTWINOPS ();  // Xterm window operations
-      void csi_XTMODKEYS (); // Xterm key modifier options
+      void csi_XTMODKEYS (); // Xterm set/reset key modifier options
+      void csi_XTQMODKEYS ();// Xterm query key modifier options
 
       void dcs_DECRQSS (const std::string&); // DEC Request Status String
 
@@ -341,6 +343,8 @@
       Color* fg = &attrs.fg;
       Color* bg = &attrs.bg;
       Color palette256 [256];
+      Color rgb_fg;
+      Color rgb_bg;
       int defaultFgPalIx; // if -1, set from opts.fg, else idx into palette256
       int defaultBgPalIx; // if -1, set from opts.bg, else idx into palette256
       int fgPalIx;
@@ -368,6 +372,8 @@
       // Terminal state - N.B.: keep resetTerminal () in sync with this!
 
       bool showCursorMode = true;
+      using CursorStyle = CharVdev::Cursor::Style;
+      CursorStyle cursorStyle = CursorStyle::filled_block;
       bool altScreenBufferMode = false;
       bool autoWrapMode = true;
       bool autoNewlineMode = false;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/src/vterm.icc new/zutty-0.15/src/vterm.icc
--- old/zutty-0.14/src/vterm.icc        2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/src/vterm.icc        2024-01-19 21:07:08.000000000 +0100
@@ -238,6 +238,7 @@
    Vterm::resetScreen ()
    {
       showCursorMode = true;
+      cursorStyle = CharVdev::Cursor::Style::filled_block;
       autoWrapMode = true;
       autoNewlineMode = false;
       keyboardLocked = false;
@@ -615,7 +616,10 @@
       {
          cf->setCursorPos (posY, posX);
          using CS = CharVdev::Cursor::Style;
-         cf->setCursorStyle (hasFocus ? CS::filled_block : CS::hollow_block);
+         CS cs = cursorStyle;
+         if (!hasFocus && cursorStyle == CS::filled_block)
+            cs = CS::hollow_block;
+         cf->setCursorStyle (cs);
       }
    }
 
@@ -733,6 +737,21 @@
    }
 
    inline void
+   Vterm::csi_DECSCUSR ()
+   {
+      TRACE_FUN;
+      int arg = inputOps [0] ? inputOps [0] : 1u;
+      using CS = CharVdev::Cursor::Style;
+      switch (arg)
+      {
+      case 3: case 4: cursorStyle = CS::underline; break;
+      case 5: case 6: cursorStyle = CS::bar; break;
+      default: cursorStyle = CS::filled_block; break;
+      }
+      setState (InputState::Normal);
+   }
+
+   inline void
    Vterm::csi_DECIC ()
    {
       TRACE_FUN;
@@ -1508,7 +1527,7 @@
    Vterm::setFgFromPalIx ()
    {
       if (fgPalIx < 0)
-         *fg = opts.fg;
+         *fg = rgb_fg;
       else if (opts.boldColors && attrs.bold && fgPalIx >= 0 && fgPalIx <= 7)
          *fg = palette256 [fgPalIx + 8];
       else
@@ -1519,7 +1538,7 @@
    Vterm::setBgFromPalIx ()
    {
       if (bgPalIx < 0)
-         *bg = opts.bg;
+         *bg = rgb_bg;
       else
          *bg = palette256 [bgPalIx];
    }
@@ -1604,9 +1623,11 @@
                break;
             case 2:
                if (k >= nInputOps - 3) break;
-               (*fg).red   = inputOps [++k];
-               (*fg).green = inputOps [++k];
-               (*fg).blue  = inputOps [++k];
+               rgb_fg.red   = inputOps [++k];
+               rgb_fg.green = inputOps [++k];
+               rgb_fg.blue  = inputOps [++k];
+               fgPalIx = -1;
+               setFgFromPalIx ();
                break;
             default:
                break;
@@ -1631,9 +1652,11 @@
                break;
             case 2:
                if (k >= nInputOps - 3) break;
-               (*bg).red   = inputOps [++k];
-               (*bg).green = inputOps [++k];
-               (*bg).blue  = inputOps [++k];
+               rgb_bg.red   = inputOps [++k];
+               rgb_bg.green = inputOps [++k];
+               rgb_bg.blue  = inputOps [++k];
+               bgPalIx = -1;
+               setBgFromPalIx ();
                break;
             default:
                break;
@@ -1659,6 +1682,8 @@
             break;
          }
       }
+      rgb_fg = opts.fg;
+      rgb_bg = opts.bg;
       setState (InputState::Normal);
    }
 
@@ -1911,6 +1936,7 @@
       {
       case 0:
          // Reset all options to initial values
+         modifyOtherKeys = opts.modifyOtherKeys;
          break;
       case 1:
          inputOps [1] = 0;
@@ -1956,6 +1982,41 @@
       }
 
       setState (InputState::Normal);
+   }
+
+   inline void
+   Vterm::csi_XTQMODKEYS ()
+   {
+      TRACE_FUN;
+
+      std::ostringstream oss;
+
+      switch (nInputOps)
+      {
+      case 0:
+         inputOps [0] = 1;
+         nInputOps = 1;
+         // fall through
+      case 1:
+         switch (inputOps [0])
+         {
+         case 0: case 1: case 2:
+            oss << "\e[>" << inputOps [0] << "m";
+            writePty (oss.str ().data (), oss.str ().size ());
+            break;
+         case 4:
+            oss << "\e[>4;" << (int)modifyOtherKeys << "m";
+            writePty (oss.str ().data (), oss.str ().size ());
+            break;
+         default:
+            logI << "XTQMODKEYS: illegal argument "
+                 << inputOps [0] << std::endl;
+            break;
+         }
+         break;
+      }
+
+      setState (InputState::Normal);
    }
 
 } // namespace zutty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/title.sh new/zutty-0.15/test/title.sh
--- old/zutty-0.14/test/title.sh        2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/test/title.sh        2024-01-19 21:07:08.000000000 +0100
@@ -6,9 +6,9 @@
 function title {
     inc=$1
     IN "source ${inc}\r"
-    title=$(cat ${inc} | cut -c 15-)
+    title=$(cat ${inc} | cut -c 14-)
     len=$(echo ${title} | wc -c)
-    len=$((len - 7))
+    len=$((len - 6))
     exp_title=$(echo ${title} | cut -c -${len})
     read_title=$(wmctrl -lp | awk "/${WID}/ {\$1=\$2=\$3=\$4=\"\"; print \$0}" 
| cut -c 5-)
     if [[ "${read_title}" == "${exp_title}" ]] ; then
@@ -27,3 +27,4 @@
 title title_inc_01.sh
 title title_inc_02.sh
 title title_inc_03.sh
+title title_inc_04.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/title_inc_01.sh 
new/zutty-0.15/test/title_inc_01.sh
--- old/zutty-0.14/test/title_inc_01.sh 2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/test/title_inc_01.sh 2024-01-19 21:07:08.000000000 +0100
@@ -1 +1 @@
-printf "\\e]0;one two three ...\\e\\"
+printf "\e]0;one two three ...\e\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/title_inc_02.sh 
new/zutty-0.15/test/title_inc_02.sh
--- old/zutty-0.14/test/title_inc_02.sh 2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/test/title_inc_02.sh 2024-01-19 21:07:08.000000000 +0100
@@ -1 +1 @@
-printf 
"\\e]0;_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789\\e\\"
+printf 
"\e]0;_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789\e\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/title_inc_03.sh 
new/zutty-0.15/test/title_inc_03.sh
--- old/zutty-0.14/test/title_inc_03.sh 2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/test/title_inc_03.sh 2024-01-19 21:07:08.000000000 +0100
@@ -1 +1 @@
-printf "\\e]0;áóéúíäöëüåăőěű ÁÓÉÚÍÄÖËÜÅĂŐĚŰ\\e\\"
+printf "\e]0;áóéúíäöëüåăőěű ÁÓÉÚÍÄÖËÜÅĂŐĚŰ\e\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/title_inc_04.sh 
new/zutty-0.15/test/title_inc_04.sh
--- old/zutty-0.14/test/title_inc_04.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/zutty-0.15/test/title_inc_04.sh 2024-01-19 21:07:08.000000000 +0100
@@ -0,0 +1 @@
+printf "\e]0;端末\e\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/truecolor.sh 
new/zutty-0.15/test/truecolor.sh
--- old/zutty-0.14/test/truecolor.sh    2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/test/truecolor.sh    2024-01-19 21:07:08.000000000 +0100
@@ -3,5 +3,8 @@
 cd $(dirname $0)
 source testbase.sh
 
-IN "source truecolor_inc.sh\r"
+IN "source truecolor_inc_01.sh\r"
 SNAP truecolor_01 33a31e4d3b9fbe486c27b01764dc1823
+
+IN "source truecolor_inc_02.sh\r"
+SNAP truecolor_02 d1c9a0265db41f2aa237c95510565dd2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/truecolor_inc.sh 
new/zutty-0.15/test/truecolor_inc.sh
--- old/zutty-0.14/test/truecolor_inc.sh        2023-02-18 12:07:41.000000000 
+0100
+++ new/zutty-0.15/test/truecolor_inc.sh        1970-01-01 01:00:00.000000000 
+0100
@@ -1,20 +0,0 @@
-export PS1="\u@\h:\w$ "
-export PROMPT_COMMAND=
-
-printf "\e[H\e[J\n"
-
-awk 'BEGIN{
-    s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
-    for (colnum = 0; colnum<77; colnum++) {
-        r = 255-(colnum*255/76);
-        g = (colnum*510/76);
-        b = (colnum*255/76);
-        if (g>255) g = 510-g;
-        printf "\033[48;2;%d;%d;%dm", r,g,b;
-        printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
-        printf "%s\033[0m", substr(s,colnum+1,1);
-    }
-    printf "\n";
-}'
-
-sleep 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/truecolor_inc_01.sh 
new/zutty-0.15/test/truecolor_inc_01.sh
--- old/zutty-0.14/test/truecolor_inc_01.sh     1970-01-01 01:00:00.000000000 
+0100
+++ new/zutty-0.15/test/truecolor_inc_01.sh     2024-01-19 21:07:08.000000000 
+0100
@@ -0,0 +1,20 @@
+export PS1="\u@\h:\w$ "
+export PROMPT_COMMAND=
+
+printf "\e[H\e[J\n"
+
+awk 'BEGIN{
+    s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
+    for (colnum = 0; colnum<77; colnum++) {
+        r = 255-(colnum*255/76);
+        g = (colnum*510/76);
+        b = (colnum*255/76);
+        if (g>255) g = 510-g;
+        printf "\033[48;2;%d;%d;%dm", r,g,b;
+        printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
+        printf "%s\033[0m", substr(s,colnum+1,1);
+    }
+    printf "\n";
+}'
+
+sleep 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/test/truecolor_inc_02.sh 
new/zutty-0.15/test/truecolor_inc_02.sh
--- old/zutty-0.14/test/truecolor_inc_02.sh     1970-01-01 01:00:00.000000000 
+0100
+++ new/zutty-0.15/test/truecolor_inc_02.sh     2024-01-19 21:07:08.000000000 
+0100
@@ -0,0 +1,11 @@
+export PS1="\u@\h:\w$ "
+export PROMPT_COMMAND=
+
+printf "\e[H\e[J\n"
+
+printf "\x1b[38;2;200;150;100mHello in RGB color\n"
+printf "\x1b[38;2;200;150;100;22mSame after attribute setting\n"
+printf "\x1b[48;2;100;50;20;35mHello in RGB background\n"
+printf "\x1b[48;2;100;50;20;35;22mSame after attribute setting\n"
+
+sleep 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/version.txt new/zutty-0.15/version.txt
--- old/zutty-0.14/version.txt  2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/version.txt  2024-01-19 21:07:08.000000000 +0100
@@ -1 +1 @@
-0.14
+0.15
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zutty-0.14/wscript new/zutty-0.15/wscript
--- old/zutty-0.14/wscript      2023-02-18 12:07:41.000000000 +0100
+++ new/zutty-0.15/wscript      2024-01-19 21:07:08.000000000 +0100
@@ -54,7 +54,7 @@
                              ['-DBSD', '-DOPENBSD', '-I/usr/X11R6/include'])
         cfg.env.append_value('LINKFLAGS', ['-L/usr/X11R6/lib'])
     elif platform == 'NetBSD':
-        cfg.env.append_value('CXXFLAGS', ['-DBSD'])
+        cfg.env.append_value('CXXFLAGS', ['-DBSD', '-DNETBSD'])
     elif platform == 'Darwin':
         cfg.env.append_value('CXXFLAGS', ['-DMACOS'])
     elif platform == 'SunOS':

++++++ zutty-0.15.tar.gz.asc ++++++
Zutty 0.15
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEEtxSivUbXxZ/Sqe0Kc6id0Tk1kS0FAmWq1o8ACgkQc6id0Tk1
kS2HdA//cxUI673EPrr+mkLWXNbxNF9TpLTHd7ZtYLgffnM/34mYLDYOy9gdmzCX
0+euzVhWO/nnvM9UFEL0aL8zK5yW2jiLSlgCo7eNEGHSsX5DbChM1vZUzEeMSvCj
qC70HRzna/iPG3ZtTvzD0Wyt8uo6OEynVANbdEQKT8qFjp/Z9cae/lxKray/242z
+QabZTV/FaeHDDGZKQVJvNsRusZJF/BhwIYXkLECm8yqs5zQX9ufMF1pMAuRWiK5
PKyPEGnnV+ngQuu2HNojJGqVA7D5dD7w36+B63omOG4ABUqxJYIluXau+LqRY2Vz
E1zSVE8+Lus+S4/njZEwIEuwrhvZSvZZQYtdtBk0ekZR+73FxvUKJHJKzwCJrzJk
oo14XM/HMxKqFU28/U3jOjudeL+KWmFZVD9ahf3q/ZmQUzrXJ4GdvU4cEvgQqZwJ
SZJcfDx5tQb4epydzIsjx3fg0oVtOrWzEoBHW7BoLQHa427+hHq1b22Y6hpe865M
Gme3JEhQbiGcJWfD1G2cbLMO79H4whrhHaAUKbd4Xa7KDDTseeTEZXvQzJ6wgykU
fqmRgn3/fdsuX8e3/Re3h3+RWU7UOM23hYTrjbKViJ+c6Tl1qWkylx0F5sL1uZ5X
RC3LOY0jSN2LoqtwgtuasGdeQDjX9DlqTK1s1EExssKcsrEZX4g=
=fmdz
-----END PGP SIGNATURE-----

Reply via email to