From 5127b4ce3d24180599e09b959c16da1cf72290e6 Mon Sep 17 00:00:00 2001 From: sabetts Date: Fri, 21 Dec 2001 13:58:01 +0000 Subject: * src/actions.h (cmd_alias): new prototype * src/actions.c (user_commands): remove "license" from the unimplemented section. (user_commands): new command "alias" (cmd_alias): new function (command): handle aliases (initialize_default_keybindings): initialize the alias list (struct cmd_alias): new struct (alias_list): new static global (alias_list_size): likewise (alias_list_last): likewise --- ChangeLog | 10 +++++++++ doc/ratpoison.texi | 15 +++++++++++++- src/actions.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/actions.h | 1 + 4 files changed, 85 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d0c8761..645dc68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,17 @@ 2001-12-21 shawn + * src/actions.h (cmd_alias): new prototype + * src/actions.c (user_commands): remove "license" from the unimplemented section. + (user_commands): new command "alias" + (cmd_alias): new function + (command): handle aliases + (initialize_default_keybindings): initialize the alias list + (struct cmd_alias): new struct + (alias_list): new static global + (alias_list_size): likewise + (alias_list_last): likewise * src/actions.h (cmd_license): new prototype diff --git a/doc/ratpoison.texi b/doc/ratpoison.texi index 5c6404c..8a1431d 100644 --- a/doc/ratpoison.texi +++ b/doc/ratpoison.texi @@ -329,7 +329,7 @@ Indicate which frame is the current frame. @end table @node Commands, Input, Keystrokes, Top -@chapter ratpoison commands +@chapter Commands ratpoison can be controlled with commands (so called colon-commands). The summary of available commands is listed below: @@ -340,6 +340,19 @@ The summary of available commands is listed below: This is a pretty useless command. By default, it is bound to @kbd{C-t g}, and its purpose is to abort other commands. +@item alias @var{name} @var{command} +An allows you to name a ratpoison command something else. For +instance, if you frequently open emacs you may want to make an alias +called @samp{emacs} that loads emacs. You would do it like this: + +@example +: alias emacs exec emacs +@end example + +An alias is treated exactly like a colon command in that you can call +it from the colon prompt, bind it to a key, and call it +non-interactively with @command{ratpoison -c}. + @item banish Banish the mouse to the lower right corner of the screen. diff --git a/src/actions.c b/src/actions.c index 3fc733f..6adb8cf 100644 --- a/src/actions.c +++ b/src/actions.c @@ -81,6 +81,7 @@ static user_command user_commands[] = {"restart", cmd_restart, arg_VOID}, {"startup_message", cmd_startup_message, arg_STRING}, {"link", cmd_link, arg_STRING}, + {"alias", cmd_alias, arg_STRING}, /*@end (tag required for genrpbindings) */ /* Commands to set default behavior. */ @@ -115,6 +116,16 @@ static user_command user_commands[] = #endif {0, 0, 0} }; +struct cmd_alias +{ + char *name; + char *alias; +}; + +static struct cmd_alias *alias_list; +static int alias_list_size; +static int alias_list_last; + rp_action* find_keybinding_by_action (char *action) { @@ -249,6 +260,11 @@ initialize_default_keybindings (void) key_actions = (rp_action*) xmalloc (sizeof (rp_action) * key_actions_table_size); key_actions_last = 0; + /* Initialive the alias list. */ + alias_list_size = 5; + alias_list_last = 0; + alias_list = xmalloc (sizeof (cmd_alias) * alias_list_size); + prefix_key.sym = KEY_PREFIX; prefix_key.state = MODIFIER_PREFIX; @@ -827,6 +843,7 @@ command (int interactive, char *data) char *cmd, *rest; char *input; user_command *uc; + int i; if (data == NULL) return NULL; @@ -863,6 +880,16 @@ command (int interactive, char *data) } } + /* Look for it in the aliases. */ + for (i=0; i= alias_list_size) + { + alias_list_size *= 2; + alias_list = xrealloc (alias_list, sizeof (cmd_alias) * alias_list_size); + } + + name = strtok (data, " "); + alias = strtok (NULL, "\0"); + + if (name == NULL || alias == NULL) + { + message (" alias: Two arguments required "); + return NULL; + } + + alias_list[alias_list_last].name = xstrdup (name); + alias_list[alias_list_last].alias = xstrdup (alias); + alias_list_last++; + + return NULL; +} diff --git a/src/actions.h b/src/actions.h index 6c46da1..685b00f 100644 --- a/src/actions.h +++ b/src/actions.h @@ -106,6 +106,7 @@ char * cmd_focuslast (int interactive, void *data); char * cmd_link (int interactive, void *data); char * cmd_defbarpadding (int interactive, void *data); char * cmd_license (int interactive, void *data); +char * cmd_alias (int interactive, void *data); /* void cmd_xterm (void *data); */ -- cgit v1.2.3