Skip to content

Commit

Permalink
emacs: Fix digits input after completion (re: 16e4824, e8b3274)
Browse files Browse the repository at this point in the history
Immediately after tab-completing the name of a directory, it is
not possible to type digits after the slash; ksh eats them as it
parses them as a menu selection for a nonexistent menu.

Reproducer:
$ mkdir -p emacstest/123abc
$ cd emacste[tab]123abc

Actual results:
$ cd emacstest/abc

Expected results:
$ cd emacstest/123abc

Workarounds are to press a non-numeric key followed by backspace,
or hit [tab] again to get a list of options.

Originally reported by Arnon Weinberg, 2012-12-23 07:15:19 UTC, at:
https://bugzilla.redhat.com/889745

The fix had been partially backported from ksh 93v- by AT&T
(16e4824), which made things worse, so it was reverted (e8b3274).
This commit backports a slightly edited version of the complete
fix. Thanks to @JohnoKing for finding the correct code. Discussion:
#198 (comment)

src/cmd/ksh93/edit/emacs.c: escape():
- Backport the fix for this bug that was implemented in ksh 93v-
  alpha 2013-10-10. Immediately after a slash, do not stay in "\"
  mode (file name completion) and reset the tab count.

src/cmd/ksh93/tests/pty.sh:
- Test the fix.

Resolves: #198
  • Loading branch information
McDutchie committed Apr 16, 2021
1 parent 5fc9e64 commit ba43436
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 3 deletions.
5 changes: 5 additions & 0 deletions NEWS
Expand Up @@ -3,6 +3,11 @@ For full details, see the git log at: https://github.com/ksh93/ksh

Any uppercase BUG_* names are modernish shell bug IDs.

2021-04-16:

- Fixed a bug in emacs mode: after using tab completion to complete the name
of a directory, it was not possible to type numbers after the slash.

2021-04-15:

- Fixed an optimization bug that caused the <>; redirection operator to fail
Expand Down
10 changes: 8 additions & 2 deletions src/cmd/ksh93/edit/emacs.c
Expand Up @@ -1008,8 +1008,14 @@ static int escape(register Emacs_t* ep,register genchar *out,int count)
case '=': /* escape = - list all matching file names */
ep->mark = cur;
if(cur<1)
{
beep();
else if(ed_expand(ep->ed,(char*)out,&cur,&eol,i,count) < 0)
return(-1);
}
ch = i;
if(i=='\\' && out[cur-1]=='/')
i = '=';
if(ed_expand(ep->ed,(char*)out,&cur,&eol,ch,count) < 0)
{
if(ep->ed->e_tabcount==1)
{
Expand All @@ -1022,7 +1028,7 @@ static int escape(register Emacs_t* ep,register genchar *out,int count)
else if(i=='=' || (i=='\\' && out[cur-1]=='/'))
{
draw(ep,REFRESH);
if(count>0)
if(count>0 || i=='\\')
ep->ed->e_tabcount=0;
else
{
Expand Down
2 changes: 1 addition & 1 deletion src/cmd/ksh93/include/version.h
Expand Up @@ -20,7 +20,7 @@

#define SH_RELEASE_FORK "93u+m" /* only change if you develop a new ksh93 fork */
#define SH_RELEASE_SVER "1.0.0-alpha" /* semantic version number: https://semver.org */
#define SH_RELEASE_DATE "2021-04-15" /* must be in this format for $((.sh.version)) */
#define SH_RELEASE_DATE "2021-04-16" /* must be in this format for $((.sh.version)) */
#define SH_RELEASE_CPYR "(c) 2020-2021 Contributors to ksh " SH_RELEASE_FORK

/* Scripts sometimes field-split ${.sh.version}, so don't change amount of whitespace. */
Expand Down
11 changes: 11 additions & 0 deletions src/cmd/ksh93/tests/pty.sh
Expand Up @@ -786,5 +786,16 @@ r ^:test-2: echo asdf\r\n$
r ^asdf\r\n$
!

# err_exit #
((SHOPT_ESH)) && mkdir -p emacstest/123abc && VISUAL=emacs tst $LINENO <<"!"
L autocomplete stops numeric input
# https://github.com/ksh93/ksh/issues/198
d 15
p :test-1:
w cd emacste\t123abc
r ^:test-1: cd emacstest/123abc\r\n$
!

# ======
exit $((Errors<125?Errors:125))

0 comments on commit ba43436

Please sign in to comment.