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:
marco_g 2005-08-28 17:01:16 +00:00
parent 0b5abe0251
commit 67f44c8687
5 changed files with 81 additions and 1 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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 ())

View file

@ -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;