Update terminfo explanation and workaround

This commit is contained in:
Sebastian J. Bronner
2019-11-07 00:19:19 +01:00
parent eb4d0d26b0
commit 0ce8ba0ecf
3 changed files with 64 additions and 38 deletions

View File

@@ -5,19 +5,18 @@
pkgname=st pkgname=st
pkgver=0.8.2 pkgver=0.8.2
pkgrel=9 pkgrel=10
pkgdesc='A simple virtual terminal emulator for X.' pkgdesc='A simple virtual terminal emulator for X.'
arch=('i686' 'x86_64' 'armv7h') arch=('i686' 'x86_64' 'armv7h')
license=('MIT') license=('MIT')
depends=(libxft) depends=(libxft)
makedepends=(libxext ncurses)
url=https://st.suckless.org url=https://st.suckless.org
source=(https://dl.suckless.org/$pkgname/$pkgname-$pkgver.tar.gz source=(https://dl.suckless.org/$pkgname/$pkgname-$pkgver.tar.gz
terminfo.patch terminfo.patch
README.terminfo.rst) README.terminfo.rst)
sha256sums=(aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35 sha256sums=(aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35
b282c0b963a24299d02e485af30260d237ca2e8e6b06282d385022c9c10a0950 bf6c8b73a606a8e513c7919d91f93ed7aeb5f44e80269bb244cc01659145a5ea
9a1b764cedd3a6288cc6601a3cdce06f4ab993f44de7aea5afd69511c13df7c0) 0ebcbba881832adf9c98ce9fe7667c851d3cc3345077cb8ebe32702698665be2)
_sourcedir=$pkgname-$pkgver _sourcedir=$pkgname-$pkgver
_makeopts="--directory=$_sourcedir" _makeopts="--directory=$_sourcedir"
@@ -69,4 +68,5 @@ package() {
install $installopts "$licdir" "$_sourcedir/LICENSE" install $installopts "$licdir" "$_sourcedir/LICENSE"
install $installopts "$docdir" "$_sourcedir/README" install $installopts "$docdir" "$_sourcedir/README"
install $installopts "$docdir" README.terminfo.rst install $installopts "$docdir" README.terminfo.rst
install $installopts "$shrdir/$pkgname" "$_sourcedir/st.info"
} }

View File

@@ -2,16 +2,16 @@ Terminfo Entries
================ ================
:Author: Sebastian J. Bronner <waschtl@sbronner.com> :Author: Sebastian J. Bronner <waschtl@sbronner.com>
:Date: 2019-10-30 :Date: 2019-11-06
:URL: https://aur.archlinux.org/packages/st :URL: https://aur.archlinux.org/packages/st
The Problem The Problem
----------- -----------
Most Linux-based distributions will have the bulk of their terminfo entries in Most Linux-based distributions will have their terminfo entries in the
the ``ncurses`` package. These live in ``/usr/share/terminfo``. There you will ``ncurses`` package. These live in ``/usr/share/terminfo``. There you will find
find several entries for ``st``. These, however, do not work well with current several entries for ``st``. As of ``ncurses-6.1`` as packaged in ArchLinux,
versions of ``st``. You need the terminfo entries supplied with ``st``. these, do not work well with current versions of ``st``.
Specifically, I have observed the following issues when using the terminfo Specifically, I have observed the following issues when using the terminfo
entries supplied with ``ncurses``: entries supplied with ``ncurses``:
@@ -38,40 +38,53 @@ For reference, I performed these tests using the following software versions:
``st`` 0.8.2, ``tmux`` 2.9_a, ``neovim`` 0.4.2, and ``w3m`` ``st`` 0.8.2, ``tmux`` 2.9_a, ``neovim`` 0.4.2, and ``w3m``
0.5.3.git20190105-1. 0.5.3.git20190105-1.
A couple of issues have been filed against ``tmux`` for this. Although it is
not a problem with ``tmux`` the issues remain for reference:
| https://github.com/tmux/tmux/issues/1264
| https://github.com/tmux/tmux/issues/1593
Complications
-------------
While it may be tempting to use the terminfo files shipped with ``st``, that
would be a bad idea from a packaging standpoint. There are two reasons for
this: (1) As of ``st-0.8.2`` they have errors in them. This has been fixed and
will roll out in the next release, though.
| https://lists.gnu.org/archive/html/bug-ncurses/2019-10/msg00071.html
| https://lists.suckless.org/hackers/1911/17006.html
(2) It is vital that remote terminals connecting via ``ssh`` are known. That is
accomplished by having all terminfo files in one package (like ``ncurses``).
``ncurses`` has released updated terminfo entries. The problem as described
above is fixed. However, the updated terminfo entries are not installed on
ArchLinux because they were released as a standalone file without a new release
of the rest of ``ncurses``.
The Solution The Solution
------------ ------------
The ``ncurses`` package should stop shipping terminfo entries for ``st``. These The solution must be to get the updated terminfo entries packaged for
should then be provided in ``/usr/share/terminfo`` by this (and other) ``st`` ArchLinux. I believe that the ``ncurses`` package should be updated to that
packages. The conflicting terminfo entries are effect.
* ``st`` and https://bugs.archlinux.org/task/57596
* ``st-256color``.
Additional entries that could be considered for removal from ``ncurses`` are
* ``st-0.6``,
* ``st-0.7``,
* ``st-16color``,
* ``st-direct``,
* ``stterm`` (for distributions that rename ``st`` to ``stterm``),
* ``stterm-16color``, and
* ``stterm-256color``.
This solution cannot be implemented without the cooperation of ``ncurses``
since many distributions (including Arch Linux) do not allow for two packages
that provide files with identical paths to be installed side-by-side.
Therefore, I am bringing this to the attention of the ``ncurses`` team.
The Workaround The Workaround
-------------- --------------
A somewhat painful, albeit pragmatic, workaround is as follows: A user that A somewhat painful, albeit pragmatic, workaround is as follows: A user that
encounters issues that are due to mismatched terminfo entries, such as those encounters issues that are due to mismatched terminfo entries, such as those
above, can symlink the terminfo entries included in this package into her above, can populate a user-level terminfo database from the terminfo entries
user-level terminfo database using the following commands: supplied by ``st``. The following command will do this:
.. code:: shell .. code:: shell
mkdir ~/.terminfo/s tic -sx /usr/share/st/st.info
ln -s /usr/share/st/terminfo/s/* ~/.terminfo/s
The generated terminfo database will most likely be placed in ``~/.terminfo``.
The command will print the actual location used. Unfortunately, these files
need to be kept up to date by hand. Actually they should probably be removed as
soon as a new version of ``ncurses`` is released.

View File

@@ -1,12 +1,25 @@
--- Makefile 2019-02-09 12:50:41.000000000 +0100 --- Makefile.old 2019-02-09 12:50:41.000000000 +0100
+++ Makefile 2019-10-30 23:39:55.775193275 +0100 +++ Makefile 2019-11-07 00:00:24.487953923 +0100
@@ -47,7 +47,8 @@ @@ -47,7 +47,6 @@
mkdir -p $(DESTDIR)$(MANPREFIX)/man1 mkdir -p $(DESTDIR)$(MANPREFIX)/man1
sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1 sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1
chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1
- tic -sx st.info - tic -sx st.info
+ mkdir -p $(DESTDIR)$(PREFIX)/share/st/terminfo
+ tic -sx -o $(DESTDIR)$(PREFIX)/share/st/terminfo st.info
@echo Please see the README file regarding the terminfo entry of st. @echo Please see the README file regarding the terminfo entry of st.
uninstall: uninstall:
--- st.info.old 2019-02-09 12:50:41.000000000 +0100
+++ st.info 2019-11-07 00:01:02.605412883 +0100
@@ -189,10 +189,10 @@
rmxx=\E[29m,
smxx=\E[9m,
# tmux extensions, see TERMINFO EXTENSIONS in tmux(1)
- Se,
- Ss,
Tc,
Ms=\E]52;%p1%s;%p2%s\007,
+ Se=\E[2 q,
+ Ss=\E[%p1%d q,
st-256color| simpleterm with 256 colors,
use=st,