cf00cd6 default-args: allow to define default arguments for aliases

Authored and Committed by Philippe Waroquiers 3 years ago
    default-args: allow to define default arguments for aliases
    
    Currently, a user can define an alias, but cannot have default
    arguments for this alias.
    
    This patch modifies the 'alias' command so that default args can
    be provided.
        (gdb) h alias
        Define a new command that is an alias of an existing command.
        Usage: alias [-a] [--] ALIAS = COMMAND [DEFAULT-ARGS...]
        ALIAS is the name of the alias command to create.
        COMMAND is the command being aliased to.
    
        Options:
          -a
            Specify that ALIAS is an abbreviation of COMMAND.
            Abbreviations are not used in command completion..
    
        GDB will automatically prepend the provided DEFAULT-ARGS to the list
        of arguments explicitly provided when using ALIAS.
        Use "help aliases" to list all user defined aliases and their default args.
    
        Examples:
        Make "spe" an alias of "set print elements":
          alias spe set print elements
        Make "elms" an alias of "elements" in the "set print" command:
          alias -a set print elms set print elements
        Make "btf" an alias of "backtrace -full -past-entry -past-main" :
          alias btf = backtrace -full -past-entry -past-main
        Make "wLapPeu" an alias of 2 nested "with":
          alias wLapPeu = with language pascal -- with print elements unlimited --
        (gdb)
    
    The way 'default-args' is implemented makes it trivial to set default
    args also for GDB commands (such as "backtrace") and for GDB pre-defined
    aliases (such as "bt").  It was however deemed better to not allow to
    define default arguments for pre-defined commands and aliases, to avoid
    users believing that e.g. default args for "backtrace" would apply to "bt".
    
    If needed, default-args could be allowed for GDB predefined commands
    and aliases by adding a command
    'set default-args GDB_COMMAND_OR_PREDEFINED_ALIAS [DEFAULT-ARGS...]'.
    
    * 'alias' command now has a completer that helps to complete:
         - ALIAS (if the user defines an alias after a prefix),
         - the aliased COMMAND
         - the possible options for the aliased COMMAND.
    
    * Help and apropos commands show the definitions of the aliases
      that have default arguments, e.g.
            (gdb) help backtrace
            backtrace, btf, where, bt
              alias btf = backtrace -full -past-entry -past-main
            Print backtrace of all stack frames, or innermost COUNT frames.
            Usage: backtrace [OPTION]... [QUALIFIER]... [COUNT | -COUNT]
    
            Options:
              -entry-values no|only|preferred|if-needed|both|compact|default
                Set printing of function arguments at function entry.
            ...
    
    gdb/ChangeLog
    2020-06-22  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
    
    	* cli/cli-cmds.c (lookup_cmd_for_default_args)
    	(alias_command_completer)
    	(make_alias_options_def_group): New functions.
    	(alias_opts, alias_option_defs): New struct and array.
    	(alias_usage_error): Update usage.
    	(alias_command): Handles optional DEFAULT-ARGS... arguments.
    	Use option framework.
    	(_initialize_cli_cmds): Update alias command help.
    	Update aliases command help.
    	(show_user):
    	Add NULL for new default_args lookup_cmd argument.
    	(valid_command_p): Rename to validate_aliased_command.
    	Add NULL for new default_args lookup_cmd argument.  Verify that the
    	aliased_command has no default args.
    	* cli/cli-decode.c (help_cmd): Show aliases definitions.
    	(lookup_cmd_1, lookup_cmd): New argument default_args.
    	(add_alias_cmd):
    	Add NULL for new default_args lookup_cmd argument.
    	(print_help_for_command): Show default args under the layout
    	 alias some_alias = some_aliased_cmd some_alias_default_arg.
    	* cli/cli-decode.h (struct cmd_list_element): New member default_args.
    	xfree default_args in destructor.
    	* cli/cli-script.c (process_next_line, do_define_command):
    	Add NULL for new default_args lookup_cmd argument.
    	* command.h: Declare new default_args argument in lookup_cmd
    	and lookup_cmd_1.
    	* completer.c (complete_line_internal_1):
    	Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument.
    	* guile/scm-cmd.c (gdbscm_parse_command_name): Likewise.
    	* guile/scm-param.c (add_setshow_generic, pascm_parameter_defined_p):
    	Likewise.
    	* infcmd.c (_initialize_infcmd): Likewise.
    	* python/py-auto-load.c (gdbpy_initialize_auto_load): Likewise.
    	* python/py-cmd.c (gdbpy_parse_command_name): Likewise.
    	* python/py-param.c (add_setshow_generic): Likewise.
    	* remote.c (_initialize_remote): Likewise.
    	* top.c (execute_command): Prepend default_args if command has some.
    	(set_verbose):
    	Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument.
    	* tracepoint.c (validate_actionline, encode_actions_1):
    	Add NULL for new default_args lookup_cmd or lookup_cmd_1 argument.
    
        
file modified
+44 -0
file modified
+197 -50
file modified
+92 -18
file modified
+4 -0
file modified
+6 -6
file modified
+2 -0
file modified
+1 -1
file modified
+1 -1
file modified
+3 -3
file modified
+3 -3
file modified
+2 -2
file modified
+1 -1
file modified
+2 -2
file modified
+2 -2
file modified
+17 -4
file modified
+3 -3