diff options
author | Matt Fleming <matt.fleming@linux.intel.com> | 2011-03-29 13:06:16 +0100 |
---|---|---|
committer | Matt Fleming <matt.fleming@linux.intel.com> | 2011-03-29 14:27:02 +0100 |
commit | f8d263e69d65c4257a49bc1a70428e89d492e361 (patch) | |
tree | 7d9c07f73b1c22ec622cc163cef4d07fc2d34195 /com32/elflink | |
parent | 8c576f1fe03e34879921311f46613a35c6530000 (diff) | |
download | syslinux-f8d263e69d65c4257a49bc1a70428e89d492e361.tar.gz syslinux-f8d263e69d65c4257a49bc1a70428e89d492e361.tar.xz syslinux-f8d263e69d65c4257a49bc1a70428e89d492e361.zip |
elflink, cli: TAB key now displays labels
Now, if the user hits the TAB key at a prompt a list of all labels to
complete the current label typed on the command-line is printed. If
nothing is typed at the command-line all labels are printed.
This feature is available in the asm command-line interface so lets
make it available in the C version.
Signed-off-by: Matt Fleming <matt.fleming@linux.intel.com>
Diffstat (limited to 'com32/elflink')
-rw-r--r-- | com32/elflink/ldlinux/cli.c | 21 | ||||
-rw-r--r-- | com32/elflink/ldlinux/readconfig.c | 11 | ||||
-rw-r--r-- | com32/elflink/modules/menu.h | 2 |
3 files changed, 34 insertions, 0 deletions
diff --git a/com32/elflink/ldlinux/cli.c b/com32/elflink/ldlinux/cli.c index 172a9f68..08845252 100644 --- a/com32/elflink/ldlinux/cli.c +++ b/com32/elflink/ldlinux/cli.c @@ -18,6 +18,7 @@ #include "getkey.h" #include "menu.h" #include "cli.h" +#include "config.h" static jmp_buf timeout_jump; @@ -394,6 +395,26 @@ const char *edit_cmdline(const char *input, int top /*, int width */ , redraw = 1; } break; + case KEY_TAB: + { + const char *p; + size_t len; + + /* Label completion enabled? */ + if (nocomplete) + break; + + p = cmdline; + len = 0; + while(*p && !my_isspace(*p)) { + p++; + len++; + } + + print_labels(cmdline, len); + redraw = 1; + break; + } default: if (key >= ' ' && key <= 0xFF && len < MAX_CMDLINE_LEN - 1) { diff --git a/com32/elflink/ldlinux/readconfig.c b/com32/elflink/ldlinux/readconfig.c index e13d6d47..a29c6c60 100644 --- a/com32/elflink/ldlinux/readconfig.c +++ b/com32/elflink/ldlinux/readconfig.c @@ -420,6 +420,17 @@ static struct menu *end_submenu(void) return current_menu->parent ? current_menu->parent : current_menu; } +void print_labels(const char *prefix, size_t len) +{ + struct menu_entry *me; + + printf("\n"); + for (me = all_entries; me; me = me->next ) { + if (!strncmp(prefix, me->label, len)) + printf(" %s\n", me->label); + } +} + static struct menu_entry *find_label(const char *str) { const char *p; diff --git a/com32/elflink/modules/menu.h b/com32/elflink/modules/menu.h index 90b54a54..8041fc97 100644 --- a/com32/elflink/modules/menu.h +++ b/com32/elflink/modules/menu.h @@ -184,6 +184,8 @@ extern const int message_base_color, menu_color_table_size; int mygetkey(clock_t timeout); int show_message_file(const char *filename, const char *background); +extern void print_labels(const char *prefix, size_t len); + /* passwd.c */ int passwd_compare(const char *passwd, const char *entry); |