Improve availability of functional terminfo entries

This commit is contained in:
Sebastian J. Bronner
2019-10-30 23:46:14 +01:00
parent 559118ce7e
commit 07a231717f
4 changed files with 109 additions and 15 deletions

View File

@@ -1,7 +1,7 @@
pkgbase = st
pkgdesc = A simple virtual terminal emulator for X.
pkgver = 0.8.2
pkgrel = 7
pkgrel = 8
url = https://st.suckless.org
arch = i686
arch = x86_64
@@ -11,7 +11,11 @@ pkgbase = st
makedepends = ncurses
depends = libxft
source = https://dl.suckless.org/st/st-0.8.2.tar.gz
source = terminfo.patch
source = README.terminfo.rst
sha256sums = aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35
sha256sums = b282c0b963a24299d02e485af30260d237ca2e8e6b06282d385022c9c10a0950
sha256sums = 9a1b764cedd3a6288cc6601a3cdce06f4ab993f44de7aea5afd69511c13df7c0
pkgname = st

View File

@@ -5,24 +5,24 @@
pkgname=st
pkgver=0.8.2
pkgrel=7
pkgrel=8
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)
sha256sums=('aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35')
_makedir=$pkgname-$pkgver
_makeopts="--directory=$_makedir"
source=(https://dl.suckless.org/$pkgname/$pkgname-$pkgver.tar.gz
terminfo.patch
README.terminfo.rst)
sha256sums=(aeb74e10aa11ed364e1bcc635a81a523119093e63befd2f231f8b0705b15bf35
b282c0b963a24299d02e485af30260d237ca2e8e6b06282d385022c9c10a0950
9a1b764cedd3a6288cc6601a3cdce06f4ab993f44de7aea5afd69511c13df7c0)
_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
@@ -45,7 +45,7 @@ prepare() {
abort=
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
@@ -55,7 +55,7 @@ prepare() {
msg+='values. Then restart the build process.'
error "$msg"
fi
cp "$_makedir/config.def.h" "$BUILDDIR"
cp "$_sourcedir/config.def.h" "$BUILDDIR"
test -z "$abort"
}
@@ -69,6 +69,7 @@ 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
}

77
README.terminfo.rst Normal file
View File

@@ -0,0 +1,77 @@
Terminfo Entries
================
:Author: Sebastian J. Bronner <waschtl@sbronner.com>
:Date: 2019-10-30
:URL: https://aur.archlinux.org/packages/st
The Problem
-----------
Most Linux-based distributions will have the bulk of their terminfo entries in
the ``ncurses`` package. These live in ``/usr/share/terminfo``. There you will
find several entries for ``st``. These, however, do not work well with current
versions of ``st``. You need the terminfo entries supplied with ``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.
The Solution
------------
The ``ncurses`` package should stop shipping terminfo entries for ``st``. These
should then be provided in ``/usr/share/terminfo`` by this (and other) ``st``
packages. The conflicting terminfo entries are
* ``st`` and
* ``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
--------------
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 symlink the terminfo entries included in this package into her
user-level terminfo database using the following commands:
.. code:: shell
mkdir ~/.terminfo/s
ln -s /usr/share/st/terminfo/s/* ~/.terminfo/s

12
terminfo.patch Normal file
View File

@@ -0,0 +1,12 @@
--- Makefile 2019-02-09 12:50:41.000000000 +0100
+++ Makefile 2019-10-30 23:39:55.775193275 +0100
@@ -47,7 +47,8 @@
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
+ 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.
uninstall: