# HG changeset patch # User Mikael Berthe # Date 1194730171 -3600 # Node ID 61a54e172010993b36b65e8bab5526379700361b # Parent 43e777a5ff0640ea571b70951472a2f78bea80ed Add internal hooks support diff -r 43e777a5ff06 -r 61a54e172010 mcabber/src/commands.c --- a/mcabber/src/commands.c Sat Nov 10 22:28:16 2007 +0100 +++ b/mcabber/src/commands.c Sat Nov 10 22:29:31 2007 +0100 @@ -292,12 +292,12 @@ // If no alias is found, returns line // Note : if the returned pointer is different from line, the caller should // g_free() the pointer after use -char *expandalias(char *line) +char *expandalias(const char *line) { const char *p1, *p2; char *word; const gchar *value; - char *newline = line; + char *newline = (char*)line; // Ignore leading COMMAND_CHAR for (p1 = line ; *p1 == COMMAND_CHAR ; p1++) @@ -357,7 +357,7 @@ // If iscmd is TRUE, process the command even if verbatim mmode is set; // it is intended to be used for key bindings. // Return 255 if this is the /quit command, and 0 for the other commands. -int process_command(char *line, guint iscmd) +int process_command(const char *line, guint iscmd) { char *p; char *xpline; @@ -367,9 +367,9 @@ if (iscmd || scr_get_multimode() != 2) xpline = expandalias(line); else - xpline = line; // No expansion in verbatim multi-line mode - - // We want to have a copy + xpline = (char*)line; // No expansion in verbatim multi-line mode + + // We want to use a copy if (xpline == line) xpline = g_strdup(line); @@ -430,7 +430,7 @@ // If this isn't a command, this is a message and it is sent to the // currently selected buddy. // Return 255 if the line is the /quit command, or 0. -int process_line(char *line) +int process_line(const char *line) { if (!*line) { // User only pressed enter if (scr_get_multimode()) { @@ -450,7 +450,7 @@ if (scr_get_multimode()) scr_append_multiline(line); else - do_say_internal(line, 0); + do_say_internal((char*)line, 0); return 0; } diff -r 43e777a5ff06 -r 61a54e172010 mcabber/src/commands.h --- a/mcabber/src/commands.h Sat Nov 10 22:28:16 2007 +0100 +++ b/mcabber/src/commands.h Sat Nov 10 22:29:31 2007 +0100 @@ -13,9 +13,9 @@ void cmd_init(void); cmd *cmd_get(const char *command); -int process_line(char *line); -int process_command(char *line, guint iscmd); -char *expandalias(char *line); +int process_line(const char *line); +int process_command(const char *line, guint iscmd); +char *expandalias(const char *line); extern char *mcabber_version(void); extern void mcabber_connect(void); diff -r 43e777a5ff06 -r 61a54e172010 mcabber/src/hooks.c --- a/mcabber/src/hooks.c Sat Nov 10 22:28:16 2007 +0100 +++ b/mcabber/src/hooks.c Sat Nov 10 22:29:31 2007 +0100 @@ -31,6 +31,7 @@ #include "settings.h" #include "utils.h" #include "utf8.h" +#include "commands.h" static char *extcmd; @@ -332,6 +333,29 @@ } +/* Internal commands */ + +void hook_execute_internal(const char *hookname) +{ + const char *hook_command; + char *buf; + char *cmdline; + + hook_command = settings_opt_get(hookname); + if (!hook_command) + return; + + buf = g_strdup_printf("Running %s...", hookname); + scr_LogPrint(LPRINT_LOGNORM, "%s", buf); + + cmdline = g_strdup_printf(mkcmdstr("%s"), hook_command); + process_command(hook_command, TRUE); // XXX Note: /quit won't work. + + g_free(cmdline); + g_free(buf); +} + + /* External commands */ // hk_ext_cmd_init() diff -r 43e777a5ff06 -r 61a54e172010 mcabber/src/hooks.h --- a/mcabber/src/hooks.h Sat Nov 10 22:28:16 2007 +0100 +++ b/mcabber/src/hooks.h Sat Nov 10 22:29:31 2007 +0100 @@ -17,6 +17,8 @@ enum imstatus old_status, enum imstatus new_status, const char *msg); +void hook_execute_internal(const char *hookname); + void hk_ext_cmd_init(const char *command); void hk_ext_cmd(const char *bjid, guchar type, guchar info, const char *data);