summaryrefslogtreecommitdiff
path: root/system/ksh/patches/0005-ksh-print-expansions-like-a-menu-with-numbers-in-vi-.diff
blob: aeb5413863f3316105785f99bca3900b316d2b23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
From 91ebd29a64451742b65115fc27034c6a3d154f90 Mon Sep 17 00:00:00 2001
From: Alexander Polakov <polachok@gmail.com>
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 a/edit.c b/edit.c
index 0b1ff7d..9cdcc6d 100644
--- a/edit.c
+++ b/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 a/edit.h b/edit.h
index 37ccf28..258affe 100644
--- a/edit.h
+++ b/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 a/emacs.c b/emacs.c
index 0bfda96..3b2d083 100644
--- a/emacs.c
+++ b/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 a/vi.c b/vi.c
index 6eb5d8c..95d192c 100644
--- a/vi.c
+++ b/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