summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--doc/ratpoison.texi15
-rw-r--r--src/actions.c60
-rw-r--r--src/actions.h1
4 files changed, 85 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d0c8761..645dc68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,17 @@
2001-12-21 shawn <sabetts@vcn.bc.ca>
+ * 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_last; i++)
+ {
+ if (!strcmp (cmd, alias_list[i].name))
+ {
+ result = command (interactive, alias_list[i].alias);
+ goto done;
+ }
+ }
+
marked_message_printf (0, 0, MESSAGE_UNKNOWN_COMMAND, cmd);
done:
@@ -2212,3 +2239,36 @@ cmd_defbarpadding (int interactive, void *data)
}
return NULL;
}
+
+char *
+cmd_alias (int interactive, void *data)
+{
+ char *name, *alias;
+
+ if (data == NULL)
+ {
+ message (" alias: At least one argument required ");
+ return NULL;
+ }
+
+ if (alias_list_last >= 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); */