summaryrefslogtreecommitdiff
path: root/src/actions.h
diff options
context:
space:
mode:
authorsabetts <sabetts>2005-01-15 04:06:57 +0000
committersabetts <sabetts>2005-01-15 04:06:57 +0000
commit4ccc6cdf0f85b397edab7e4aec9dd412ceefc99b (patch)
tree22cc0dc116dca71b18e28dc78c02b84818c1bb39 /src/actions.h
parenteb4f8c1e431d34bfa27a736af0b5d59dde09b200 (diff)
downloadratpoison-4ccc6cdf0f85b397edab7e4aec9dd412ceefc99b.zip
* src/actions.c (ARG_STRING): new define
(ARG): likewise (set_vars): change to a list_head. (add_set_var): new function (init_set_vars): likewise (user_commands): change to a list_head. Move command definitions to init_user_commands. (add_command): new function (init_user_commands): likewise (cmdret_new): likewise (cmdret_new_printf): likewise (cmdret_free): likewise (read_string): likewise (read_keymap): likewise (read_keydesc): likewise (read_command): likewise (read_shellcmd): likewise (read_frame): likewise (read_window): likewise (read_gravity): likewise (read_group): likewise (read_hook): likewise (read_variable): likewise (hook_completions): likewise (read_number): likewise (read_arg): likewise (parsed_input_to_args): likewise (fill_in_missing_args): likewise (parse_args): likewise (arg_array): likewise (arg_free): likewise (command): use parse_args, parsed_input_to_args, fill_in_missing_args to parse arguments and pass to command functions. (command): return cmdret* structure. prototype updated. (cmd_abort): second arg is an array of struct cmdarg*. Return cmdret*. Updated to use new parsed arguments. (cmd_addhook): likewise (cmd_alias): likewise (cmd_banish): likewise (cmd_bind): likewise (cmd_chdir): likewise (cmd_clrunmanaged): likewise (cmd_colon): likewise (cmd_curframe): likewise (cmd_delete): likewise (cmd_echo): likewise (cmd_escape): likewise (cmd_exec): likewise (cmd_fdump): likewise (cmd_focusdown): likewise (cmd_focuslast): likewise (cmd_focusleft): likewise (cmd_focusright): likewise (cmd_focusup): likewise (cmd_frestore): likewise (cmd_fselect): likewise (cmd_gdelete): likewise (cmd_getenv): likewise (cmd_gmerge): likewise (cmd_gmove): likewise (cmd_gnew): likewise (cmd_gnewbg): likewise (cmd_gnext): likewise (cmd_gprev): likewise (cmd_gravity): likewise (cmd_groups): likewise (cmd_gselect): likewise (cmd_h_split): likewise (cmd_help): likewise (cmd_info): likewise (cmd_kill): likewise (cmd_last): likewise (cmd_lastmsg): likewise (cmd_license): likewise (cmd_link): likewise (cmd_listhook): likewise (cmd_meta): likewise (cmd_msgwait): likewise (cmd_newwm): likewise (cmd_next): likewise (cmd_next_frame): likewise (cmd_nextscreen): likewise (cmd_number): likewise (cmd_only): likewise (cmd_other): likewise (cmd_prev): likewise (cmd_prev_frame): likewise (cmd_prevscreen): likewise (cmd_quit): likewise (cmd_redisplay): likewise (cmd_remhook): likewise (cmd_remove): likewise (cmd_rename): likewise (cmd_resize): likewise (cmd_restart): likewise (cmd_rudeness): likewise (cmd_select): likewise (cmd_setenv): likewise (cmd_shrink): likewise (cmd_source): likewise (cmd_startup_message): likewise (cmd_time): likewise (cmd_tmpwm): likewise (cmd_unalias): likewise (cmd_unbind): likewise (cmd_unimplemented): likewise (cmd_unmanage): likewise (cmd_unsetenv): likewise (cmd_v_split): likewise (cmd_verbexec): likewise (cmd_version): likewise (cmd_warp): likewise (cmd_windows): likewise (cmd_readkey): likewise (cmd_newkmap): likewise (cmd_delkmap): likewise (cmd_definekey): likewise (cmd_undefinekey): likewise (cmd_set): likewise (cmd_sselect): likewise (cmd_ratwarp): likewise (cmd_ratclick): likewise (cmd_ratrelwarp): likewise (cmd_rathold): likewise (cmd_cnext): likewise (cmd_cother): likewise (cmd_cprev): likewise (cmd_dedicate): likewise (cmd_describekey): likewise (cmd_inext): likewise (cmd_iother): likewise (cmd_iprev): likewise (cmd_prompt): likewise (cmd_sdump): likewise (cmd_sfdump): likewise (cmd_undo): likewise (cmd_putsel): likewise (cmd_getsel): likewise (set_resizeunit): arg is an array of struct cmdarg*. Return cmdret*. Updated to use new parsed arguments. (set_wingravity): likewise (set_transgravity): likewise (set_maxsizegravity): likewise (set_bargravity): likewise (set_font): likewise (set_padding): likewise (set_border): likewise (set_barborder): likewise (set_inputwidth): likewise (set_waitcursor): likewise (set_winfmt): likewise (set_winname): likewise (set_fgcolor): likewise (set_bgcolor): likewise (set_barpadding): likewise (set_winliststyle): likewise (set_framesels): likewise (set_maxundos): likewise * src/actions.h: include ratpoison.h (argtype): add arg_FRAME, arg_WINDOW, arg_COMMAND, arg_SHELLCMD, arg_KEYMAP, arg_KEY, arg_GRAVITY, arg_GROUP, arg_HOOK, arg_VARIABLE. (union arg_union): new union (struct cmdarg): new struct (struct argspec): likewise (struct cmdret): likewise (user_command): change func to reflect new command function args. add num_args, ni_required_args, i_required_args. (RP_CMD): new macro for prototyping command functions. all command function prototypes updated to use this macro. (init_user_commands): new prototype (cmdret_free): likewise * src/main.c (read_rc_file): handle cmdret* returned by command. (main): call init_user_commands * src/linkedlist.h (list_size): new prototype * src/linkedlist.c (list_size): new function * src/globals.h (RET_SUCCESS): new define (RET_FAILURE): new define * src/events.c (handle_key): handle the cmdret structure returned by command. (execute_remote_command): return cmdret*. (receive_command): mark the command return string as error or output before sending. * src/data.h (struct rp_action): change data element type to char* * src/communications.c (receive_command_result): print command output to stderr if marked as an error.
Diffstat (limited to 'src/actions.h')
-rw-r--r--src/actions.h270
1 files changed, 161 insertions, 109 deletions
diff --git a/src/actions.h b/src/actions.h
index 73ce89b..9b4ec6d 100644
--- a/src/actions.h
+++ b/src/actions.h
@@ -25,129 +25,181 @@
#define MAX_COMMAND_LENGTH 100
#define MAX_ARGS_LENGTH 100
+#include <ratpoison.h>
+
typedef struct user_command user_command;
-enum argtype { arg_VOID, arg_STRING, arg_NUMBER };
+enum argtype { arg_REST, arg_NUMBER, arg_STRING, arg_FRAME,
+ arg_WINDOW, arg_COMMAND, arg_SHELLCMD,
+ arg_KEYMAP, arg_KEY, arg_GRAVITY, arg_GROUP,
+ arg_HOOK, arg_VARIABLE };
+
+union arg_union {
+ rp_frame *frame;
+ int number;
+ float fnumber;
+ rp_window *win;
+ rp_keymap *keymap;
+ rp_group *group;
+ struct list_head *hook;
+ struct set_var *variable;
+ struct rp_key *key;
+ int gravity;
+ };
+
+struct cmdarg
+{
+ int type;
+ char *string;
+ union arg_union arg;
+ struct list_head node;
+};
+
+struct argspec
+{
+ int type;
+ char *prompt;
+};
+
+/* The structure returned by a command. */
+typedef struct cmdret cmdret;
+struct cmdret
+{
+ char *output;
+ int success;
+};
struct
user_command
{
char *name;
- char * (*func)(int, char *);
- int argtype;
+ cmdret * (*func)(int, struct cmdarg **);
+ struct argspec *args;
+ int num_args;
+ /* The number of required arguments. Any arguments after that are
+ optional and won't be filled in when called
+ interactively. ni_required_args is used when called non-interactively,
+ i_required_args when called interactively. */
+ int ni_required_args, i_required_args;
+
+ struct list_head node;
};
int spawn(char *data);
-char * command (int interactive, char *data);
-
-char *cmd_abort (int interactive, char *data);
-char *cmd_addhook (int interactive, char *data);
-char *cmd_alias (int interactive, char *data);
-char *cmd_banish (int interactive, char *data);
-char *cmd_bind (int interactive, char *data);
-char *cmd_chdir (int interactive, char *data);
-char *cmd_clrunmanaged (int interactive, char *data);
-char *cmd_colon (int interactive, char *data);
-char *cmd_curframe (int interactive, char *data);
-char *cmd_delete (int interactive, char *data);
-char *cmd_echo (int interactive, char *data);
-char *cmd_escape (int interactive, char *data);
-char *cmd_exec (int interactive, char *data);
-char *cmd_fdump (int interactively, char *data);
-char *cmd_focusdown (int interactive, char *data);
-char *cmd_focuslast (int interactive, char *data);
-char *cmd_focusleft (int interactive, char *data);
-char *cmd_focusright (int interactive, char *data);
-char *cmd_focusup (int interactive, char *data);
-char *cmd_frestore (int interactively, char *data);
-char *cmd_fselect (int interactive, char *data);
-char *cmd_gdelete (int interactive, char *data);
-char *cmd_getenv (int interactive, char *data);
-char *cmd_gmerge (int interactive, char *data);
-char *cmd_gmove (int interactive, char *data);
-char *cmd_gnew (int interactive, char *data);
-char *cmd_gnewbg (int interactive, char *data);
-char *cmd_gnext (int interactive, char *data);
-char *cmd_gprev (int interactive, char *data);
-char *cmd_gravity (int interactive, char *data);
-char *cmd_groups (int interactive, char *data);
-char *cmd_gselect (int interactive, char *data);
-char *cmd_h_split (int interactive, char *data);
-char *cmd_help (int interactive, char *data);
-char *cmd_info (int interactive, char *data);
-char *cmd_kill (int interactive, char *data);
-char *cmd_last (int interactive, char *data);
-char *cmd_lastmsg (int interactive, char *data);
-char *cmd_license (int interactive, char *data);
-char *cmd_link (int interactive, char *data);
-char *cmd_listhook (int interactive, char *data);
-char *cmd_meta (int interactive, char *data);
-char *cmd_msgwait (int interactive, char *data);
-char *cmd_newwm(int interactive, char *which);
-char *cmd_next (int interactive, char *data);
-char *cmd_next_frame (int interactive, char *data);
-char *cmd_nextscreen (int interactive, char *data);
-char *cmd_number (int interactive, char *data);
-char *cmd_only (int interactive, char *data);
-char *cmd_other (int interactive, char *data);
-char *cmd_prev (int interactive, char *data);
-char *cmd_prev_frame (int interactive, char *data);
-char *cmd_prevscreen (int interactive, char *data);
-char *cmd_quit(int interactive, char *data);
-char *cmd_redisplay (int interactive, char *data);
-char *cmd_remhook (int interactive, char *data);
-char *cmd_remove (int interactive, char *data);
-char *cmd_rename (int interactive, char *data);
-char *cmd_resize (int interactive, char *data);
-char *cmd_restart (int interactive, char *data);
-char *cmd_rudeness (int interactive, char *data);
-char *cmd_select (int interactive, char *data);
-char *cmd_setenv (int interactive, char *data);
-char *cmd_shrink (int interactive, char *data);
-char *cmd_source (int interactive, char *data);
-char *cmd_startup_message (int interactive, char *data);
-char *cmd_time (int interactive, char *data);
-char *cmd_tmpwm (int interactive, char *data);
-char *cmd_togglewrapwinlist ();
-char *cmd_unalias (int interactive, char *data);
-char *cmd_unbind (int interactive, char *data);
-char *cmd_unimplemented (int interactive, char *data);
-char *cmd_unmanage (int interactive, char *data);
-char *cmd_unsetenv (int interactive, char *data);
-char *cmd_v_split (int interactive, char *data);
-char *cmd_verbexec (int interactive, char *data);
-char *cmd_version (int interactive, char *data);
-char *cmd_warp(int interactive, char *data);
-char *cmd_windows (int interactive, char *data);
-char *cmd_readkey (int interactive, char *data);
-char *cmd_newkmap (int interactive, char *data);
-char *cmd_delkmap (int interactive, char *data);
-char *cmd_definekey (int interactive, char *data);
-char *cmd_set (int interactive, char *data);
-char *cmd_sselect(int interactive, char *data);
-char *cmd_ratwarp (int interactive, char *data);
-char *cmd_ratclick (int interactive, char *data);
-char *cmd_ratrelwarp (int interactive, char *data);
-char *cmd_rathold (int interactive, char *data);
-char *cmd_cnext (int interactive, char *data);
-char *cmd_cother (int interactive, char *data);
-char *cmd_cprev (int interactive, char *data);
-char *cmd_dedicate (int interactive, char *data);
-char *cmd_describekey (int interactive, char *data);
-char *cmd_inext (int interactive, char *data);
-char *cmd_iother (int interactive, char *data);
-char *cmd_iprev (int interactive, char *data);
-char *cmd_prompt (int interactive, char *data);
-char *cmd_sdump (int interactive, char *data);
-char *cmd_sfdump (int interactively, char *data);
-char *cmd_undo (int interactive, char *data);
-char *cmd_putsel (int interactive, char *data);
-char *cmd_getsel (int interactive, char *data);
-char *cmd_appendsel (int interactive, char *data);
+cmdret *command (int interactive, char *data);
+
+/* command function prototypes. */
+#define RP_CMD(cmd) cmdret *cmd_ ## cmd (int interactive, struct cmdarg **args)
+RP_CMD (abort);
+RP_CMD (addhook);
+RP_CMD (alias);
+RP_CMD (banish);
+RP_CMD (bind);
+RP_CMD (chdir);
+RP_CMD (clrunmanaged);
+RP_CMD (colon);
+RP_CMD (curframe);
+RP_CMD (delete);
+RP_CMD (echo);
+RP_CMD (escape);
+RP_CMD (exec);
+RP_CMD (fdump);
+RP_CMD (focusdown);
+RP_CMD (focuslast);
+RP_CMD (focusleft);
+RP_CMD (focusright);
+RP_CMD (focusup);
+RP_CMD (frestore);
+RP_CMD (fselect);
+RP_CMD (gdelete);
+RP_CMD (getenv);
+RP_CMD (gmerge);
+RP_CMD (gmove);
+RP_CMD (gnew);
+RP_CMD (gnewbg);
+RP_CMD (gnext);
+RP_CMD (gprev);
+RP_CMD (gravity);
+RP_CMD (groups);
+RP_CMD (gselect);
+RP_CMD (h_split);
+RP_CMD (help);
+RP_CMD (info);
+RP_CMD (kill);
+RP_CMD (last);
+RP_CMD (lastmsg);
+RP_CMD (license);
+RP_CMD (link);
+RP_CMD (listhook);
+RP_CMD (meta);
+RP_CMD (msgwait);
+RP_CMD (newwm);
+RP_CMD (next);
+RP_CMD (next_frame);
+RP_CMD (nextscreen);
+RP_CMD (number);
+RP_CMD (only);
+RP_CMD (other);
+RP_CMD (prev);
+RP_CMD (prev_frame);
+RP_CMD (prevscreen);
+RP_CMD (quit);
+RP_CMD (redisplay);
+RP_CMD (remhook);
+RP_CMD (remove);
+RP_CMD (rename);
+RP_CMD (resize);
+RP_CMD (restart);
+RP_CMD (rudeness);
+RP_CMD (select);
+RP_CMD (setenv);
+RP_CMD (shrink);
+RP_CMD (source);
+RP_CMD (startup_message);
+RP_CMD (time);
+RP_CMD (tmpwm);
+RP_CMD (unalias);
+RP_CMD (unbind);
+RP_CMD (unimplemented);
+RP_CMD (unmanage);
+RP_CMD (unsetenv);
+RP_CMD (v_split);
+RP_CMD (verbexec);
+RP_CMD (version);
+RP_CMD (warp);
+RP_CMD (windows);
+RP_CMD (readkey);
+RP_CMD (newkmap);
+RP_CMD (delkmap);
+RP_CMD (definekey);
+RP_CMD (undefinekey);
+RP_CMD (set);
+RP_CMD (sselect);
+RP_CMD (ratwarp);
+RP_CMD (ratclick);
+RP_CMD (ratrelwarp);
+RP_CMD (rathold);
+RP_CMD (cnext);
+RP_CMD (cother);
+RP_CMD (cprev);
+RP_CMD (dedicate);
+RP_CMD (describekey);
+RP_CMD (inext);
+RP_CMD (iother);
+RP_CMD (iprev);
+RP_CMD (prompt);
+RP_CMD (sdump);
+RP_CMD (sfdump);
+RP_CMD (undo);
+RP_CMD (putsel);
+RP_CMD (getsel);
+
void pop_frame_undo (rp_frame_undo *u);
rp_keymap *find_keymap (char *name);
+void init_user_commands();
void initialize_default_keybindings (void);
+void cmdret_free (cmdret *ret);
void keymap_free (rp_keymap *map);
void free_aliases ();
void free_keymaps ();