2005-09-20 13:26:39 +00:00
/** \file builtin.h
2012-11-18 10:23:22 +00:00
Prototypes for functions for executing builtin functions .
2005-09-20 13:26:39 +00:00
*/
2005-10-04 15:11:39 +00:00
# ifndef FISH_BUILTIN_H
# define FISH_BUILTIN_H
2015-07-25 15:14:25 +00:00
# include <stddef.h> // for size_t
# include <vector> // for vector
2005-10-04 15:11:39 +00:00
2007-04-25 18:30:02 +00:00
# include "io.h"
2012-01-16 16:56:47 +00:00
# include "common.h"
2005-09-20 13:26:39 +00:00
2015-07-25 15:14:25 +00:00
class completion_t ;
2012-01-16 20:10:08 +00:00
class parser_t ;
2005-09-20 13:26:39 +00:00
enum
{
2012-11-19 00:30:30 +00:00
COMMAND_NOT_BUILTIN ,
BUILTIN_REGULAR ,
BUILTIN_FUNCTION
2005-09-20 13:26:39 +00:00
}
;
2005-10-24 15:26:25 +00:00
/**
Error message on missing argument
*/
2015-09-11 01:08:42 +00:00
# define BUILTIN_ERR_MISSING _( L"%ls: Expected argument for option %ls\n" )
2005-10-24 15:26:25 +00:00
/**
Error message on invalid combination of options
*/
2006-01-04 12:51:02 +00:00
# define BUILTIN_ERR_COMBO _( L"%ls: Invalid combination of options\n" )
/**
Error message on invalid combination of options
*/
# define BUILTIN_ERR_COMBO2 _( L"%ls: Invalid combination of options,\n%ls\n" )
2005-10-24 15:26:25 +00:00
/**
Error message on multiple scope levels for variables
*/
2007-01-31 16:03:17 +00:00
# define BUILTIN_ERR_GLOCAL _( L"%ls: Variable scope can only be one of universal, global and local\n" )
2005-10-24 15:26:25 +00:00
/**
Error message for specifying both export and unexport to set / read
*/
2007-01-31 16:03:17 +00:00
# define BUILTIN_ERR_EXPUNEXP _( L"%ls: Variable can't be both exported and unexported\n" )
2005-10-24 15:26:25 +00:00
/**
Error message for unknown switch
*/
2012-11-18 10:23:22 +00:00
# define BUILTIN_ERR_UNKNOWN _( L"%ls: Unknown option '%ls'\n" )
2005-09-20 13:26:39 +00:00
2006-01-23 20:40:14 +00:00
/**
Error message for invalid character in variable name
*/
2006-01-04 12:51:02 +00:00
# define BUILTIN_ERR_VARCHAR _( L"%ls: Invalid character '%lc' in variable name. Only alphanumerical characters and underscores are valid in a variable name.\n" )
2005-12-07 16:06:47 +00:00
2006-01-23 20:40:14 +00:00
/**
Error message for invalid ( empty ) variable name
*/
2006-01-04 12:51:02 +00:00
# define BUILTIN_ERR_VARNAME_ZERO _( L"%ls: Variable name can not be the empty string\n" )
2005-12-07 16:06:47 +00:00
2006-06-17 13:07:08 +00:00
/**
Error message when too many arguments are supplied to a builtin
*/
2006-05-26 11:24:02 +00:00
# define BUILTIN_ERR_TOO_MANY_ARGUMENTS _( L"%ls: Too many arguments\n" )
2006-10-04 21:39:48 +00:00
# define BUILTIN_ERR_NOT_NUMBER _( L"%ls: Argument '%ls' is not a number\n" )
2012-02-22 18:51:06 +00:00
2005-09-20 13:26:39 +00:00
/**
2012-11-18 10:23:22 +00:00
Initialize builtin data .
2005-09-20 13:26:39 +00:00
*/
void builtin_init ( ) ;
/**
Destroy builtin data .
*/
void builtin_destroy ( ) ;
/**
Is there a builtin command with the given name ?
*/
2012-11-19 00:30:30 +00:00
int builtin_exists ( const wcstring & cmd ) ;
2005-09-20 13:26:39 +00:00
/**
2012-11-18 10:23:22 +00:00
Execute a builtin command
2005-09-20 13:26:39 +00:00
2012-01-16 20:10:08 +00:00
\ param parser The parser being used
2012-11-18 10:23:22 +00:00
\ param argv Array containing the command and parameters
2005-09-20 13:26:39 +00:00
of the builtin . The list is terminated by a
2012-11-18 10:23:22 +00:00
null pointer . This syntax resembles the syntax
2005-09-20 13:26:39 +00:00
for exec .
2008-01-13 16:47:47 +00:00
\ param io the io redirections to perform on this builtin .
2005-09-20 13:26:39 +00:00
\ return the exit status of the builtin command
*/
2015-09-21 18:24:49 +00:00
int builtin_run ( parser_t & parser , const wchar_t * const * argv , io_streams_t & streams ) ;
2005-09-20 13:26:39 +00:00
2012-02-01 03:47:56 +00:00
/** Returns a list of all builtin names */
2015-07-28 01:45:47 +00:00
wcstring_list_t builtin_get_names ( ) ;
2012-02-01 03:47:56 +00:00
2012-02-01 04:22:25 +00:00
/** Insert all builtin names into list. */
2015-07-28 01:45:47 +00:00
void builtin_get_names ( std : : vector < completion_t > * list ) ;
2012-01-16 16:56:47 +00:00
2005-09-20 13:26:39 +00:00
/**
2012-05-18 02:37:46 +00:00
Return a one - line description of the specified builtin .
2005-09-20 13:26:39 +00:00
*/
2012-11-19 00:30:30 +00:00
wcstring builtin_get_desc ( const wcstring & b ) ;
2005-09-20 13:26:39 +00:00
2014-08-16 01:14:36 +00:00
/** Support for setting and removing transient command lines.
This is used by ' complete - C ' in order to make
the commandline builtin operate on the string to complete instead
of operating on whatever is to be completed . It ' s also used by
completion wrappers , to allow a command to appear as the command
being wrapped for the purposes of completion .
Instantiating an instance of builtin_commandline_scoped_transient_t
pushes the command as the new transient commandline . The destructor removes it .
It will assert if construction / destruction does not happen in a stack - like ( LIFO ) order .
*/
class builtin_commandline_scoped_transient_t
{
size_t token ;
public :
builtin_commandline_scoped_transient_t ( const wcstring & cmd ) ;
~ builtin_commandline_scoped_transient_t ( ) ;
} ;
2006-01-30 16:51:50 +00:00
2005-10-04 15:11:39 +00:00
2006-06-13 13:43:28 +00:00
/**
2007-10-02 10:09:37 +00:00
Run the __fish_print_help function to obtain the help information
2012-02-01 04:22:25 +00:00
for the specified command .
2006-06-13 13:43:28 +00:00
*/
2012-11-19 00:30:30 +00:00
wcstring builtin_help_get ( parser_t & parser , const wchar_t * cmd ) ;
2006-06-13 13:43:28 +00:00
2013-12-27 11:58:42 +00:00
/** Defines a function, like builtin_function. Returns 0 on success. args should NOT contain 'function' as the first argument. */
2015-09-21 18:24:49 +00:00
int define_function ( parser_t & parser , io_streams_t & streams , const wcstring_list_t & c_args , const wcstring & contents , int definition_line_offset , wcstring * out_err ) ;
2013-12-27 09:38:43 +00:00
2005-10-04 15:11:39 +00:00
# endif