Red Hat Bugzilla – Bug 59171
Delete key in slrn's line editor results in endles series of bells
Last modified: 2014-03-16 22:25:20 EDT
Description of Problem:
Slrn: Hit 'L' to get a selection of available newsgroups. Hit 'delete' key.
Result: Console or terminal emulator gives an endless series of bells, slrn
stops to accept user input. Problem goes away when using a vanilla S-Lang 1.4.4
build from source.
Version-Release number of selected component (if applicable):
Slrn: 0.9.7.3 built from source
Steps to Reproduce:
1. Open slrn on console or in arbitrary terminal emulator
2. Press 'L' to select newsgroups
3. Press 'delete' key
The console/terminal emulator gives a neverending series of bells. Slrn stops to
accept user input, and has to be killed. Default kill is enough.
Performing the steps when using a vanilla S-Lang build from source gives one
bell and prints a '~' in the line editor.
Problem was reported on usenet in news.software.readers, and has been confirmed
for RedHat 7.2 by other posters. Problem is absent in current Debian unstable.
So far, the bug only shows up in slrn, but since using another S-Lang library
fixes it, it really seems to be a problem with RH's S-Lang package. Slrn
maintainer thinks so, too.
Modification: Problem apparently results from incorrect delete key
configuration. Putting 'setkey readline del "^[[3~" in the slrn config file
solves it. But since the problem is present when using RH 7.2's original
S-Lang 1.4.4 and slrn 0.9.7.1 packages, I still consider it a bug.
I have a similar problem with a pager called most. Pressing any key which is NOT
used by the program causes it to go into an infinite beeping loop. Downgrading
slang to the version shipped with RH 7.1 fixes the problem. Recompiling and
relinking to the newer version of slang does not fix it. This would certainly
appear to be a bug in slang-1.4.4-4 which was not in slang-1.4.2-2.
The problem is still present in RH 7.3 and is not present in the pristine
sources. The patch slang-1.4.5-keymap.patch changes the function SLang_do_key so
that if a key is hit which is not defined, that key is unget again. So the next
call to SLang_do_key tries to get the same key which is unget once again. The
result is an infinite loop as the application keeps getting the same key which
is not defined over and over.
This is definitely a bug, which has, I suspect, been introduced into slang as a
workaround to solve a problem in a buggy application. The documentation says
quite clearly that SLang_do_key should return NULL if the key is not defined and
not that it should unget the key. This is hardly what one would intuitively
expect and it breaks other applications.
The fix is simply to remove the patch and fix whatever application caused the
patch to be added in the first place.
Patch removed in 1.4.5-4.