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-----