mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
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 (16e4824c
), which made things worse, so it was reverted (e8b3274a
). This commit backports a slightly edited version of the complete fix. Thanks to @JohnoKing for finding the correct code. Discussion: https://github.com/ksh93/ksh/issues/198#issuecomment-820178514 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: https://github.com/ksh93/ksh/issues/198
This commit is contained in:
parent
5fc9e64208
commit
ba43436f10
4 changed files with 25 additions and 3 deletions
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue