From 91ebd29a64451742b65115fc27034c6a3d154f90 Mon Sep 17 00:00:00 2001 From: Alexander Polakov Date: Sun, 29 May 2011 15:41:53 +0400 Subject: [PATCH 5/8] ksh: print expansions like a "menu" (with numbers) in vi mode * adds an extra argument to x_print_expansions() - preserves the emacs mode behaviour Why: in vi mode one can use the expansion number to complete the word, but w/o numbers printed you have to *count* expansions with your eyes to find out the number. Stupid, huh? --- edit.c | 7 +++++-- edit.h | 2 +- emacs.c | 4 ++-- vi.c | 4 ++-- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git edit.c edit.c index 0b1ff7d..9cdcc6d 100644 --- edit.c +++ edit.c @@ -292,7 +292,7 @@ static void glob_path(int flags, const char *pat, XPtrV *wp, const char *path); void -x_print_expansions(int nwords, char *const *words, int is_command) +x_print_expansions(int nwords, char *const *words, int is_command, int menu) { int use_copy = 0; int prefix_len; @@ -330,7 +330,10 @@ x_print_expansions(int nwords, char *const *words, int is_command) */ x_putc('\r'); x_putc('\n'); - pr_list(use_copy ? (char **) XPptrv(l) : words); + if (menu) + pr_menu(use_copy ? (char **) XPptrv(l) : words); + else + pr_list(use_copy ? (char **) XPptrv(l) : words); if (use_copy) XPfree(l); /* not x_free_words() */ diff --git edit.h edit.h index 37ccf28..258affe 100644 --- edit.h +++ edit.h @@ -52,7 +52,7 @@ void x_puts(const char *); bool x_mode(bool); int promptlen(const char *, const char **); int x_do_comment(char *, int, int *); -void x_print_expansions(int, char *const *, int); +void x_print_expansions(int, char *const *, int, int); int x_cf_glob(int, const char *, int, int, int *, int *, char ***, int *); int x_longest_prefix(int , char *const *); int x_basename(const char *, const char *); diff --git emacs.c emacs.c index 0bfda96..3b2d083 100644 --- emacs.c +++ emacs.c @@ -1684,7 +1684,7 @@ do_complete(int flags, /* XCF_{COMMAND,FILE,COMMAND_FILE} */ } if (type == CT_LIST) { - x_print_expansions(nwords, words, is_command); + x_print_expansions(nwords, words, is_command, 0); x_redraw(0); x_free_words(nwords, words); return; @@ -1707,7 +1707,7 @@ do_complete(int flags, /* XCF_{COMMAND,FILE,COMMAND_FILE} */ } if (type == CT_COMPLIST && !completed) { - x_print_expansions(nwords, words, is_command); + x_print_expansions(nwords, words, is_command, 0); completed = 1; } diff --git vi.c vi.c index 6eb5d8c..95d192c 100644 --- vi.c +++ vi.c @@ -1990,7 +1990,7 @@ complete_word(int command, int count, int flags) count--; if (count >= nwords) { vi_error(); - x_print_expansions(nwords, words, is_command); + x_print_expansions(nwords, words, is_command, 1); x_free_words(nwords, words); redraw_line(0); return -1; @@ -2064,7 +2064,7 @@ print_expansions(struct edstate *e, int flags) vi_error(); return -1; } - x_print_expansions(nwords, words, is_command); + x_print_expansions(nwords, words, is_command, 1); x_free_words(nwords, words); redraw_line(0); return 0; -- 1.7.5