1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-13 11:42:21 +00:00

Fix the Alt+D and Alt+H keyboard shortcuts in emacs mode (#178)

This commit fixes the functionality of Alt+D and Alt+H in emacs mode.
These keyboard shortcuts are intended to work on whole words, but
after commit 13c3fb21 their functionality was reduced to deleting only
singular letters:

$ Test word <Alt+H>    # This should delete 'word', not just 'd'.
$ Foo <Alt+B> <Alt+D>  # This should delete 'Foo', not just 'F'.

Man page entries for reference:
  M-d       Delete current word.
  M-^H      (Meta-backspace) Delete previous word.
  M-h       Delete previous word.

src/cmd/ksh93/edit/emacs.c:
- 'count' cannot be overridden when handling Alt+D or Alt+H,
  so add the total number of repetitions to count (the number of
  repetitions can't be negative).
- If 'count' is a negative number, set it to one before adding the
  number of repetitions.
This commit is contained in:
Johnothan King 2021-02-15 17:47:15 -08:00 committed by GitHub
parent 24598fed7c
commit 29b11bba3a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 5 deletions

3
NEWS
View file

@ -5,6 +5,9 @@ Any uppercase BUG_* names are modernish shell bug IDs.
2021-02-15:
- Fixed a bug in the emacs built-in editor, introduced on 2020-09-17, that
made the Meta-D and Meta-H keys delete single characters instead of words.
- A new 'backslashctrl' shell option has been added. It is on by default.
Turning it off (set +o backslashctrl or set --nobackslashctrl) disables the
special escaping behaviour of the backslash character in the emacs and vi

View file

@ -318,13 +318,13 @@ int ed_emacsread(void *context, int fd,char *buff,int scend, int reedit)
killing = 0;
#endif
oadjust = count = adjust;
if(vt220_save_repeat)
{
count = vt220_save_repeat;
vt220_save_repeat = 0;
}
if(count<0)
count = 1;
if(vt220_save_repeat>0)
{
count += vt220_save_repeat;
vt220_save_repeat = 0;
}
adjust = -1;
i = cur;
if(c!='\t' && c!=ESC && !digit(c))