2005-08-28 Marco Gerards <metgerards@student.han.nl>
* include/grub/normal.h (enum grub_completion_type): Added `GRUB_COMPLETION_TYPE_ARGUMENT'. * normal/cmdline.c (print_completion): Handle the `GRUB_COMPLETION_TYPE_ARGUMENT' type. * normal/menu_entry.c (store_completion): Likewise. * normal/completion.c (complete_arguments): New function. (grub_normal_do_completion): Call `complete_arguments' when the current words start with a dash.
This commit is contained in:
parent
0b5abe0251
commit
67f44c8687
5 changed files with 81 additions and 1 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
|||
2005-08-28 Marco Gerards <metgerards@student.han.nl>
|
||||
|
||||
* include/grub/normal.h (enum grub_completion_type): Added
|
||||
`GRUB_COMPLETION_TYPE_ARGUMENT'.
|
||||
|
||||
* normal/cmdline.c (print_completion): Handle
|
||||
the `GRUB_COMPLETION_TYPE_ARGUMENT' type.
|
||||
* normal/menu_entry.c (store_completion): Likewise.
|
||||
|
||||
* normal/completion.c (complete_arguments): New function.
|
||||
(grub_normal_do_completion): Call `complete_arguments' when the
|
||||
current words start with a dash.
|
||||
|
||||
2005-08-27 Marco Gerards <metgerards@student.han.nl>
|
||||
|
||||
* conf/powerpc-ieee1275.rmk (pkgdata_MODULES): Fix typo (use
|
||||
|
|
|
@ -51,6 +51,7 @@ enum grub_completion_type
|
|||
GRUB_COMPLETION_TYPE_DEVICE,
|
||||
GRUB_COMPLETION_TYPE_PARTITION,
|
||||
GRUB_COMPLETION_TYPE_FILE,
|
||||
GRUB_COMPLETION_TYPE_ARGUMENT
|
||||
};
|
||||
typedef enum grub_completion_type grub_completion_type_t;
|
||||
|
||||
|
|
|
@ -187,6 +187,9 @@ print_completion (const char *item, grub_completion_type_t type, int count)
|
|||
case GRUB_COMPLETION_TYPE_PARTITION:
|
||||
what = "partitions";
|
||||
break;
|
||||
case GRUB_COMPLETION_TYPE_ARGUMENT:
|
||||
what = "arguments";
|
||||
break;
|
||||
default:
|
||||
what = "things";
|
||||
break;
|
||||
|
|
|
@ -303,6 +303,61 @@ complete_file (void)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Complete an argument. */
|
||||
static int
|
||||
complete_arguments (char *command)
|
||||
{
|
||||
grub_command_t cmd;
|
||||
struct grub_arg_option *option;
|
||||
char shortarg[] = "- ";
|
||||
|
||||
cmd = grub_command_find (command);
|
||||
|
||||
if (!cmd || !cmd->options)
|
||||
return 0;
|
||||
|
||||
if (add_completion ("-u", " ", GRUB_COMPLETION_TYPE_ARGUMENT))
|
||||
return 1;
|
||||
|
||||
/* Add the short arguments. */
|
||||
for (option = cmd->options; option->doc; option++)
|
||||
{
|
||||
if (!option->shortarg)
|
||||
continue;
|
||||
|
||||
shortarg[1] = option->shortarg;
|
||||
if (add_completion (shortarg, " ", GRUB_COMPLETION_TYPE_ARGUMENT))
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
/* First add the built-in arguments. */
|
||||
if (add_completion ("--help", " ", GRUB_COMPLETION_TYPE_ARGUMENT))
|
||||
return 1;
|
||||
if (add_completion ("--usage", " ", GRUB_COMPLETION_TYPE_ARGUMENT))
|
||||
return 1;
|
||||
|
||||
/* Add the long arguments. */
|
||||
for (option = cmd->options; option->doc; option++)
|
||||
{
|
||||
char *longarg;
|
||||
if (!option->longarg)
|
||||
continue;
|
||||
|
||||
longarg = grub_malloc (grub_strlen (option->longarg));
|
||||
grub_sprintf (longarg, "--%s", option->longarg);
|
||||
|
||||
if (add_completion (longarg, " ", GRUB_COMPLETION_TYPE_ARGUMENT))
|
||||
{
|
||||
grub_free (longarg);
|
||||
return 1;
|
||||
}
|
||||
grub_free (longarg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Try to complete the string in BUF. Return the characters that
|
||||
should be added to the string. This command outputs the possible
|
||||
completions by calling HOOK, in that case set RESTORE to 1 so the
|
||||
|
@ -342,7 +397,12 @@ grub_normal_do_completion (char *buf, int *restore,
|
|||
{
|
||||
current_word++;
|
||||
|
||||
if (*current_word == '(' && ! grub_strchr (current_word, ')'))
|
||||
if (*current_word == '-')
|
||||
{
|
||||
if (complete_arguments (buf))
|
||||
goto fail;
|
||||
}
|
||||
else if (*current_word == '(' && ! grub_strchr (current_word, ')'))
|
||||
{
|
||||
/* Complete a device. */
|
||||
if (complete_device ())
|
||||
|
|
|
@ -840,6 +840,9 @@ store_completion (const char *item, grub_completion_type_t type, int count)
|
|||
case GRUB_COMPLETION_TYPE_PARTITION:
|
||||
what = "partitions";
|
||||
break;
|
||||
case GRUB_COMPLETION_TYPE_ARGUMENT:
|
||||
what = "arguments";
|
||||
break;
|
||||
default:
|
||||
what = "things";
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue