*/
#include <lib-lib/lib-lib.h>
+#include <lib-lua/lib-lua.h>
#include <lib-ui/curses.h>
#include <lib-mx/mx.h>
#include <lib-mx/compress.h>
{
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];
if (*s->dptr == '!') {
s->dptr = vskipspaces(s->dptr + 1);
- not = 1;
+ neg = 1;
}
mutt_extract_token (&pattern, s, 0);
/* 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)) {
ptr->pattern = pat;
ptr->rx.pattern = pattern.data;
ptr->rx.rx = rx;
- ptr->rx.not = not;
+ ptr->rx.neg = neg;
return 0;
error:
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 */
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)
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);
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;
}
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);
}
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);
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);