diff --git a/.SRCINFO b/.SRCINFO index 1d7affe..7cbbc61 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,25 +1,27 @@ pkgbase = st pkgdesc = A simple virtual terminal emulator for X. pkgver = 0.8.2 - pkgrel = 7 + pkgrel = 10 url = https://st.suckless.org arch = i686 arch = x86_64 arch = armv7h license = MIT - makedepends = libxext - makedepends = ncurses depends = libxft source = https://dl.suckless.org/st/st-0.8.2.tar.gz source = config.h source = https://st.suckless.org/patches/nordtheme/st-nordtheme-0.8.2.diff source = https://st.suckless.org/patches/scrollback/st-scrollback-20190331-21367a0.diff source = https://st.suckless.org/patches/scrollback/st-scrollback-mouse-0.8.diff + source = terminfo.patch + source = README.terminfo.rst sha256sums = aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35 sha256sums = 8fc9a87a5bac9e4eebd4f7683e009aa34d74e9e0cbd0f2cc5e60f3fd01d40f3f - sha256sums = bd7c467dba6027c156d1bd1f3b65d8666787d3c2ff5c743e54e19c6d79a5ba96 + sha256sums = 01de8a6d0d855c31496c7963e78edb7565a81b60dcb9e9f00dd3eab1f43b526b sha256sums = f974bc0e11bda909a6d6d529d28abde4c97e651107b6a6047f2fab8837010b43 sha256sums = 3fb38940cc3bad3f9cd1e2a0796ebd0e48950a07860ecf8523a5afd0cd1b5a44 + sha256sums = bf6c8b73a606a8e513c7919d91f93ed7aeb5f44e80269bb244cc01659145a5ea + sha256sums = 0ebcbba881832adf9c98ce9fe7667c851d3cc3345077cb8ebe32702698665be2 pkgname = st diff --git a/PKGBUILD b/PKGBUILD index b9b2b48..01608f2 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,66 +5,62 @@ pkgname=st pkgver=0.8.2 -pkgrel=7 +pkgrel=10 pkgdesc='A simple virtual terminal emulator for X.' arch=('i686' 'x86_64' 'armv7h') license=('MIT') depends=(libxft) -makedepends=(libxext ncurses) url=https://st.suckless.org source=(https://dl.suckless.org/$pkgname/$pkgname-$pkgver.tar.gz config.h https://st.suckless.org/patches/nordtheme/st-nordtheme-0.8.2.diff https://st.suckless.org/patches/scrollback/st-scrollback-20190331-21367a0.diff - https://st.suckless.org/patches/scrollback/st-scrollback-mouse-0.8.diff) + https://st.suckless.org/patches/scrollback/st-scrollback-mouse-0.8.diff + terminfo.patch + README.terminfo.rst) sha256sums=('aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35' '8fc9a87a5bac9e4eebd4f7683e009aa34d74e9e0cbd0f2cc5e60f3fd01d40f3f' - 'bd7c467dba6027c156d1bd1f3b65d8666787d3c2ff5c743e54e19c6d79a5ba96' + '01de8a6d0d855c31496c7963e78edb7565a81b60dcb9e9f00dd3eab1f43b526b' 'f974bc0e11bda909a6d6d529d28abde4c97e651107b6a6047f2fab8837010b43' - '3fb38940cc3bad3f9cd1e2a0796ebd0e48950a07860ecf8523a5afd0cd1b5a44') -_makedir=$pkgname-$pkgver -_makeopts="--directory=$_makedir" + '3fb38940cc3bad3f9cd1e2a0796ebd0e48950a07860ecf8523a5afd0cd1b5a44' + 'bf6c8b73a606a8e513c7919d91f93ed7aeb5f44e80269bb244cc01659145a5ea' + '0ebcbba881832adf9c98ce9fe7667c851d3cc3345077cb8ebe32702698665be2') +_sourcedir=$pkgname-$pkgver +_makeopts="--directory=$_sourcedir" prepare() { - # Do not install terminfo files, as they conflict with ncurses. - sed -r \ - -e '/^[[:space:]]+tic\>/d' \ - -e '/^[[:space:]]+@echo .* terminfo/d' \ - -i $_makedir/Makefile + patch --directory="$_sourcedir" --strip=0 < terminfo.patch # This package provides a mechanism to provide a custom config.h. Multiple # configuration states are determined by the presence of two files in # $BUILDDIR: # - # * config.h: The user has supplied his or her configuration. The file will - # be copied to $srcdir and used during build. - # * config.def.h only: The user was previously made aware of the - # configuration options and has opted not to make any configuration - # changes. The package is built using default values. - # * neither file: Initial state. The user receives a message on how to - # configure this package. The build process is aborted after the copy - # operation below. + # config.h config.def.h state + # ======== ============ ===== + # absent absent Initial state. The user receives a message on how + # to configure this package. + # absent present The user was previously made aware of the + # configuration options and has not made any + # configuration changes. The package is built using + # default values. + # present The user has supplied his or her configuration. The + # file will be copied to $srcdir and used during + # build. # - # After this test, config.def.h is copied from $srcdir to provide an up to - # date template for the user. If neither file was present initially, further - # build steps are aborted at this point. Even if no config.h is provided, - # future runs will proceed with default values due to the presence of - # config.def.h. - abort= + # After this test, config.def.h is copied from $srcdir to $BUILDDIR to + # provide an up to date template for the user. if [ -e "$BUILDDIR/config.h" ] then - cp "$BUILDDIR/config.h" "$_makedir" + cp "$BUILDDIR/config.h" "$_sourcedir" elif [ ! -e "$BUILDDIR/config.def.h" ] then - abort=1 - msg='This package can be configured in config.h. Copy config.def.h just ' - msg+='placed into the package directory to config.h and modify it to ' - msg+='change the configuration. Or just leave it alone to use default ' - msg+='values. Then restart the build process.' - error "$msg" + msg='This package can be configured in config.h. Copy the config.def.h ' + msg+='that was just placed into the package directory to config.h and ' + msg+='modify it to change the configuration. Or just leave it alone to ' + msg+='continue to use default values.' + warning "$msg" fi - cp "$_makedir/config.def.h" "$BUILDDIR" - test -z "$abort" + cp "$_sourcedir/config.def.h" "$BUILDDIR" # apply patches cd $srcdir/$pkgname-$pkgver/ @@ -83,6 +79,8 @@ package() { local licdir="$shrdir/licenses/$pkgname" local docdir="$shrdir/doc/$pkgname" make $_makeopts PREFIX=/usr DESTDIR="$pkgdir" install - install $installopts "$licdir" "$_makedir/LICENSE" - install $installopts "$docdir" "$_makedir/README" + install $installopts "$licdir" "$_sourcedir/LICENSE" + install $installopts "$docdir" "$_sourcedir/README" + install $installopts "$docdir" README.terminfo.rst + install $installopts "$shrdir/$pkgname" "$_sourcedir/st.info" } diff --git a/README.terminfo.rst b/README.terminfo.rst new file mode 100644 index 0000000..cd724d0 --- /dev/null +++ b/README.terminfo.rst @@ -0,0 +1,90 @@ +Terminfo Entries +================ + +:Author: Sebastian J. Bronner +:Date: 2019-11-06 +:URL: https://aur.archlinux.org/packages/st + +The Problem +----------- + +Most Linux-based distributions will have their terminfo entries in the +``ncurses`` package. These live in ``/usr/share/terminfo``. There you will find +several entries for ``st``. As of ``ncurses-6.1`` as packaged in ArchLinux, +these, do not work well with current versions of ``st``. + +Specifically, I have observed the following issues when using the terminfo +entries supplied with ``ncurses``: + +* Start ``st``. +* Run ``tmux`` in the ``st`` window. +* Run ``nvim`` in ``tmux``. + + * ``tmux`` will crash immediately with the following message: + + .. code:: console + + [lost server] + % + +* Run ``w3m`` with any URL in ``tmux``. + + * ``w3m`` will not react to any key presses (most notably the arrow keys and + ``q``) and must be terminated with ``killall w3m``. + * The command line returned where ``w3m`` was running will show all the + missing keypresses. + +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`` +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 must be to get the updated terminfo entries packaged for +ArchLinux. I believe that the ``ncurses`` package should be updated to that +effect. + +https://bugs.archlinux.org/task/57596 + +The Workaround +-------------- + +A somewhat painful, albeit pragmatic, workaround is as follows: A user that +encounters issues that are due to mismatched terminfo entries, such as those +above, can populate a user-level terminfo database from the terminfo entries +supplied by ``st``. The following command will do this: + +.. code:: shell + + tic -sx /usr/share/st/st.info + +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. diff --git a/terminfo.patch b/terminfo.patch new file mode 100644 index 0000000..0f2ae88 --- /dev/null +++ b/terminfo.patch @@ -0,0 +1,25 @@ +--- Makefile.old 2019-02-09 12:50:41.000000000 +0100 ++++ Makefile 2019-11-07 00:00:24.487953923 +0100 +@@ -47,7 +47,6 @@ + mkdir -p $(DESTDIR)$(MANPREFIX)/man1 + sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1 + chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 +- tic -sx st.info + @echo Please see the README file regarding the terminfo entry of st. + + 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,