X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=hook.c;h=7361bba01ead7a85af7bd216760441f756f9d907;hp=0a8cc51fa6b5e04a4c0bb5010b5976bb6aab8792;hb=848103a9e131502955368274d94a818050978cc2;hpb=20392fc3c433909de76c676c235524acd96bec60 diff --git a/hook.c b/hook.c index 0a8cc51..7361bba 100644 --- a/hook.c +++ b/hook.c @@ -8,6 +8,7 @@ */ #include +#include #include #include #include @@ -41,7 +42,7 @@ int mutt_parse_hook (BUFFER * buf __attribute__ ((unused)), BUFFER * s, { hook_t *ptr; BUFFER command, pattern; - int rc, not = 0; + int rc, neg = 0; regex_t *rx = NULL; pattern_t *pat = NULL; char path[_POSIX_PATH_MAX]; @@ -51,7 +52,7 @@ int mutt_parse_hook (BUFFER * buf __attribute__ ((unused)), BUFFER * s, if (*s->dptr == '!') { s->dptr = vskipspaces(s->dptr + 1); - not = 1; + neg = 1; } mutt_extract_token (&pattern, s, 0); @@ -110,7 +111,7 @@ int mutt_parse_hook (BUFFER * buf __attribute__ ((unused)), BUFFER * s, /* check to make sure that a matching hook doesn't already exist */ for (ptr = Hooks; ptr; ptr = ptr->next) { if (ptr->type == (int)data && - ptr->rx.not == not && !m_strcmp(pattern.data, ptr->rx.pattern)) { + ptr->rx.neg == neg && !m_strcmp(pattern.data, ptr->rx.pattern)) { if (data & (M_FOLDERHOOK | M_SENDHOOK | M_SEND2HOOK | M_MESSAGEHOOK | M_ACCOUNTHOOK | M_REPLYHOOK)) { @@ -173,7 +174,7 @@ int mutt_parse_hook (BUFFER * buf __attribute__ ((unused)), BUFFER * s, ptr->pattern = pat; ptr->rx.pattern = pattern.data; ptr->rx.rx = rx; - ptr->rx.not = not; + ptr->rx.neg = neg; return 0; error: @@ -245,7 +246,7 @@ void mutt_folder_hook (char *path) continue; if (tmp->type & M_FOLDERHOOK) { - if ((regexec (tmp->rx.rx, path, 0, NULL, 0) == 0) ^ tmp->rx.not) { + if ((regexec (tmp->rx.rx, path, 0, NULL, 0) == 0) ^ tmp->rx.neg) { if (mutt_parse_rc_line (tmp->command, &token, &err) == -1) { mutt_error ("%s", err.data); mutt_sleep (1); /* pause a moment to let the user see the error */ @@ -256,6 +257,20 @@ void mutt_folder_hook (char *path) p_delete(&token.data); current_hook_type = 0; + + { + lua_State *L = luaM_getruntime(); + lua_getfield(L, LUA_GLOBALSINDEX, "MCore"); + lua_getfield(L, -1, "folder_hook"); + lua_remove(L, -2); + if (lua_isfunction(L, -1)) { + lua_pushstring(L, LastFolder); + lua_pushstring(L, CurrentFolder); + lua_pcall(L, 2, 0, 0); + } else { + lua_pop(L, 1); + } + } } char *mutt_find_hook (int type, const char *pat) @@ -286,7 +301,7 @@ void mutt_message_hook (CONTEXT * ctx, HEADER * hdr, int type) continue; if (hook->type & type) - if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.not) + if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.neg) if (mutt_parse_rc_line (hook->command, &token, &err) != 0) { mutt_error ("%s", err.data); mutt_sleep (1); @@ -308,7 +323,7 @@ mutt_addr_hook (char *path, ssize_t pathlen, unsigned long type, CONTEXT * ctx, continue; if (hook->type & type) - if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.not) { + if ((mutt_pattern_exec (hook->pattern, 0, ctx, hdr) > 0) ^ hook->rx.neg) { mutt_make_string (path, pathlen, hook->command, ctx, hdr); return 0; } @@ -356,10 +371,10 @@ void mutt_select_fcc (char *path, ssize_t pathlen, HEADER * hdr) mutt_safe_path (buf, sizeof (buf), adr); mutt_concat_path(path, pathlen, NONULL(Maildir), buf); if (!option (OPTFORCENAME) && mx_access (path, W_OK) != 0) - m_strcpy(path, pathlen, NONULL(Outbox)); + m_strcpy(path, pathlen, NONULL(MAlias.record)); } else - m_strcpy(path, pathlen, NONULL(Outbox)); + m_strcpy(path, pathlen, NONULL(MAlias.record)); } mutt_pretty_mailbox (path); } @@ -370,7 +385,7 @@ static const char *_mutt_string_hook (const char *match, int hook) for (; tmp; tmp = tmp->next) { if ((tmp->type & hook) - && ((match && regexec(tmp->rx.rx, match, 0, NULL, 0) == 0) ^ tmp->rx.not)) + && ((match && regexec(tmp->rx.rx, match, 0, NULL, 0) == 0) ^ tmp->rx.neg)) return (tmp->command); } return (NULL); @@ -396,7 +411,7 @@ void mutt_account_hook (const char *url) if (!(hook->command && (hook->type & M_ACCOUNTHOOK))) continue; - if ((regexec (hook->rx.rx, url, 0, NULL, 0) == 0) ^ hook->rx.not) { + if ((regexec (hook->rx.rx, url, 0, NULL, 0) == 0) ^ hook->rx.neg) { if (mutt_parse_rc_line (hook->command, &token, &err) == -1) { mutt_error ("%s", err.data); mutt_sleep (1);