Skip to content

Commit

Permalink
Add params support for aliases
Browse files Browse the repository at this point in the history
Before aliases used spaces in their name,
now the alias part is being read only before the first space,
thus allowing execution of complex command with aliases.

Example (with plugin):
`/alias add echo "/system exec echo"`
will allow execution of
`/echo test`
as opposed to prior state when the Profanity will
search for alias "echo tests" and output `Unknown command: /echo test`

Minor change: removed an example with invalid command (`/away`)
  • Loading branch information
H3rnand3zzz committed Oct 19, 2023
1 parent 2ab9a30 commit 7bd12ea
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
4 changes: 2 additions & 2 deletions src/command/cmd_defs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1643,12 +1643,12 @@ static const struct cmd_t command_defs[] = {
"Add, remove or list command aliases.")
CMD_ARGS(
{ "list", "List all aliases." },
{ "add <name> <value>", "Add a new command alias." },
{ "add <name> <value>", "Add a new command alias. The alias name should not contain any space characters." },
{ "remove <name>", "Remove a command alias." })
CMD_EXAMPLES(
"/alias add friends /who online friends",
"/alias add /q /quit",
"/alias add a /away \"I'm in a meeting.\"",
"/alias add urg /msg odin@valhalla.edda [URGENT]",
"/alias remove q",
"/alias list")
},
Expand Down
23 changes: 16 additions & 7 deletions src/command/cmd_funcs.c
Original file line number Diff line number Diff line change
Expand Up @@ -5091,6 +5091,10 @@ cmd_alias(ProfWin* window, const char* const command, gchar** args)
cons_bad_cmd_usage(command);
return TRUE;
} else {
if (strchr(alias, ' ')) {
cons_bad_cmd_usage(command);
return TRUE;
}
char* alias_p = alias;
GString* ac_value = g_string_new("");
if (alias[0] == '/') {
Expand Down Expand Up @@ -8565,15 +8569,20 @@ _cmd_execute_alias(ProfWin* window, const char* const inp, gboolean* ran)
}

auto_char char* alias = strdup(inp + 1);
auto_gchar gchar* value = prefs_get_alias(alias);
if (value) {
*ran = TRUE;
gboolean result = cmd_process_input(window, value);
return result;
auto_gcharv char** alias_parts = g_strsplit(alias, " ", 2);
auto_gchar gchar* value = prefs_get_alias(alias_parts[0]);

if (!value) {
*ran = FALSE;
return TRUE;
}

*ran = FALSE;
return TRUE;
char* params = alias_parts[1];
auto_gchar gchar* full_cmd = params ? g_strdup_printf("%s %s", value, params) : g_strdup(value);

*ran = TRUE;
gboolean result = cmd_process_input(window, full_cmd);
return result;
}

// helper function for status change commands
Expand Down

0 comments on commit 7bd12ea

Please sign in to comment.