This is the ‘NEWS’ file for the ‘screen-wrappers’ project. This file contains information on changes since the last release of the package, as well as a running list of changes from previous versions. If critical bugs are found in any of the software, notice of such bugs and the versions in which they were fixed will be noted here, as well.
Fixed minor POD typo in screen-ls(1).
At build time, a shebang line should be inserted into the generated ‘screen-ls’ program, using the ‘bash’ executable found at configure time. The build used to do so, and has been fixed to do so again.
This bug was introduced in screen-wrappers 0.3.3 (released 2019-01-21), and went undetected for years – probably because using Bash for one’s interactive shell is so common; the script happens to work when Bash is the the user’s interactive shell, or when invoked from a script that Bash is running. The reason is due to the long-standing Unix tradition of treating text files as shell scripts when their executable bit is set, even if they lack a shebang line. (That behavior predates the invention of the shebang line.) The system returns ENOEXEC to the invoking process, and in the case of Bash the shell attempts to interpret the lines of the text file as shell commands. (Other shells do something similar, or explicitly invoke /bin/sh with the text file as an argument.)
It was never intended that the screen-ls program would depend on the above described behavior.
When the ‘-l’ (–long) command line option was provided, the ‘screen-ls’ command was overly agressive in filtering the output of the underlying GNU ‘screen’ command output. The result was that the last line of desired output was missing. This has now been fixed.
issue #15: screen-ls: explicitly initialize array variables to work with bash-4.x older than bash-4.4-alpha
This bug was due to ‘screen-ls’ inadvertently relying on a change implmented for bash-4.4. From the CHANGES file section for bash-4.4-alpha:
f. The `-p’ option to declare and similar builtins will display attributes for named variables even when those variables have not been assigned values (which are technically unset).
When a version of bash-4.x prior to bash-4.4-alpha was being used, the ‘screen-ls’ program would emit the following error:
$ screen-ls screen-ls (BUG): f_parse_screen_program_version_or_die(): value provided for V_NAME_ARY_ASSOC_RAW argument (“SCREEN_VERSION_ARRAY_RAW”) is not a legit, writable global associative array identifier; bailing out
The source of that error was a change was made (commit: d3024d90b735ef6e884e7ff50a21d56ae17a0c02) in the ‘screen-ls’ program as distributed with recently released screen-wrappers-0.3.3 that declared two global associative array variables without assigning values to them:
declare -A SCREEN_VERSION_ARRAY_RAW # may contain non-numeric bits (e.g., from "4.00.03jw4")
declare -A SCREEN_VERSION_ARRAY_NUMERIC_ONLY
In order to work with earlier versions of bash-4.x, we needed to explicitly initialize those variables with empty values:
declare -A SCREEN_VERSION_ARRAY_RAW=() # may contain non-numeric bits (e.g., from "4.00.03jw4")
declare -A SCREEN_VERSION_ARRAY_NUMERIC_ONLY=()
(none)
Added logic to check exit status of ‘screen -q -ls’ prior to attempting to parse the output of ‘screen -ls’. This provides a more direct way of detecting the “no screen sessions found” scenario because the ‘-q’ option causes screen to exit with status 9. The ‘screen’ exit statuses between 10 and 125 are treated as “one or more screen session found”. The behavior of exit status 10 and above is consistent with screen(1), which states:
-q Suppress printing of error messages. In combination with “-ls” the exit value is as follows: 9 indicates a directory without ses- sions. 10 indicates a directory with running but not attachable sessions. 11 (or more) indicates 1 (or more) usable sessions. In combination with “-r” the exit value is as follows: 10 indicates that there is no session to resume. 12 (or more) indicates that there are 2 (or more) sessions to resume and you should specify which one to choose. In all other cases “-q” has no effect.
[The above taken from screen(1) as provided with screen version 4.00.03 (FAU) 23-Oct-06. Note that the man page text for the option remains identical to the above as of screen version 4.05.00 (GNU) 10-Dec-16]
The limit of treating 125 as the highest exit status interpreted as described above is due to the fact that bash uses values of 126 and higher to indicate various abnormal exit conditions (killed by various signals, etc.). For more on that, see the “EXIT STATUS” section of bash(1).
Consistent with prior releases of the ‘screen-wrappers’ package, the ‘screen-ls’ program still exits with a zero (success) status if it was able to complete its work successfully, regardless of whether any existing screen sessions were found.
If verbose output has been enabled, then a message is printed to stderr explaining the “no screen sessions found” scenario:
$ screen-ls $ echo $? 0
:
$ screen-ls -v screen-ls (info): no screen sessions exist (okay); exiting early with success status (no work left to do) $ echo $? 0
issue #14: screen-ls.in: refactor f_is_screen_4_dot_3_or_newer(…) to accept screen version string as a function argument
The jury is still out on the degree to which this may be an improvement, but the parsing of the output of ‘screen –version’ has been made more robust (both in being more lenient in what we might get, as well as in the checking of the exit status of the invocation).
The HACKING file now reflects the author’s use of automake 1.15.
The ‘screen-ls’ program now unconditionally unsets the GREP_OPTIONS environment variable.
This only has an effect if the grep program in use is GNU grep; other grep implementations did not recognize or alter their behavior based on the ‘GREP_OPTIONS’ variable. GNU grep prior to version 2.11 (~2014-11) would append values from this variable to the command line, which would make behavior of our invocations in the current program unpredictable. Versions of GNU grep 2.11 or newer no longer behave that way, but do emit a warning on stderr about the change in behavior.
Unsetting GREP_OPTIONS here has the effect of making our grep invocations predictable (when older versions of GNU grep are in use) and also of suppressing the spurious warning:
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
when newer versions of GNU grep are in use.
This prevents these configure-time warnings:
/path/to/screen-wrappers/autotools/missing: Unknown `--is-lightweight' option Try `/path/to/screen-wrappers/autotools/missing --help' for more information configure: WARNING: 'missing' script is too old or missing
The ‘screen-ls’ program uses associative arrays, which were introduced in bash-4.0. The ‘configure’ was previously checking for the presence of bash, but did not check for any particular version. The consequence was that it was possible to build a version of the program that did not work at runtime if installing on a host that only has bash 3.x (yes, the author came across such a thing in the wild).
The ‘configure’ script now checks that the found version of bash is at major version 4 or newer, and bombs out with an error message if that is not the case.
If you have multiple versions of bash installed on your machine, you can tell ‘configure’ where to find the one you want to use by specifying the ‘BASH_SH’ variable on the ‘configure’ command line like this:
$ ./configure --prefix=/path/to/wherever BASH_SH=/path/to/your/bash-4
Prior to this fix the ‘screen-ls’ program was only able to parse the ‘screen -ls’ output from more recent versions of GNU ‘screen’, and was swallowing all of the output from ancient versions of ‘screen’ that produced a slightly different output.
The program was expecting to parse output in the form:
28189.screen-wrappers-hacking (06/22/2016 06:49:18 PM) (Attached)
but was inadvertently swallowing all of the output from older versions, which have the form:
28189.screen-wrappers-hacking (Attached)
The ‘screen-wrappers’ author is still encountering those ancient versions “in the wild”, so the ‘screen-ls’ program has been enhanced to be flexible enough to correctly parse both forms.
Old format behavior tested with ‘screen’ 4.00.03 (FAU) 23-Oct-06.
New format behavior tested with ‘screen’ 4.04.00 (GNU) 19-Jun-16.
(none)
The `’–no-backlink’` option to `pod2html` requests what is the default behavior for that tool, but that command line option is not available on some older `pod2html` versions (such as that from perl 5.8.8) on hosts on which we wish to build screen-wrappers. We therefore have removed the option from the Makefile recipe; the resulting build is identical in behavior and outcome to that prior to this change, but the build is now able to complete successfully on a slightly wider range of machines (at the expense of the build recipe being slightly less explicit about the wanted behavior).
(none)
(none)
The content of the file was also updated to integrate better from the GitHub repository view (which shows the README file by default) with the project’s GitHub Pages site.
Also renamed the file from ‘README’ to ‘README.md’ so GitHub would recognize it as a markdown file.
All of the following representative invocations are now equivalent:
$ screen-ls -l -p $ screen-ls -lp
$ screen-ls -p -l $ screen-ls -pl
Prior to this change, the bundled variations (‘-lp’ and ‘-pl’) caused the program to exit with an error code.
The project is now able to generate man pages in HTML format (in addition
to the troff format man pages). This is mainly intended for use by the
author to incorporate them into the ‘screen-wrappers’ project’s GitHub
Pages web site. However, the mechanism is generic and will install the
pages beneath a ‘html’ directory beneath the htmldir
location (which can
be specified at configure-time).
Since this is a new capability, we have bumped up the ‘m’ in our M.m.p (semver) version number from ‘0.2.3’ to ‘0.3.0’.
screen-ls: fix github issue #2: name of last session name was being omitted from output when using newer versions of GNU ‘screen’.
See: #2
(none)
Upstream GNU screen versions prior to 4.3.0 exited with a non-zero exit status of 1 (rather than the expected zero status) when invoked with the ‘screen -ls’ option, as is done by the ‘screen-ls’ program:
http://savannah.gnu.org/bugs/?26750
Earlier versions of ‘screen-ls’ had a comment in the source code noting the wonkiness, and broke with GNU screen 4.3.0 when the upstream bug #26750 was addressed (2015-06-12).
The ‘screen-ls’ program now attempts to parse the output of ‘screen –version’ at runtime and adapt its behavior accordingly. If it detects a version of GNU screen older than 4.3.0, then the traditional ‘screen-ls’ behavior is used. If a version of screen newer than 4.3.0 is detected, then the behavior is modified to expect a zero exit status to indicate a successful outcome from the ‘screen -ls’ invocation.
(none)
This release of ‘screen-wrappers’ finds the project publicly hosted on GitHub for the first time. The project’s GitHub URL is:
http://github.com/salewski/screen-wrappers
(none)
The new ‘-U’ (–unsorted) option prevents the program from sorting the output, and instead list screen sessions in order output by screen(1). Thanks to John Marquart for suggesting this feature.
The screen-wrappers-0.1.0 release included a version of ‘screen-ls’ that had code left in that was being used by the author to verify error handling by forcing the exception condition, with the result that the program was unusable. Sorry! This has been corrected.
This is the initial release of ‘screen-wrappers’.
The ‘screen-wrappers’ project provides convenience wrappers for various invocations of the GNU screen(1) program.
http://www.gnu.org/software/screen/
This initial release provides only the ‘screen-ls’ program. Once installed, you can read screen-ls(1) to learn all about it.
See the README file for more information.