From: Karel Zak Date: Fri, 4 Oct 2013 18:34:57 +0000 (-0700) Subject: extend to accept folder name/uri X-Git-Tag: neomutt-20160404~13^2~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c4903f33236749ceeb81ac1ea1cf662fd1a621f8;p=neomutt extend to accept folder name/uri Suvayu Ali Signed-off-by: Karel Zak --- diff --git a/curs_lib.c b/curs_lib.c index a3c82514b..9320fdc97 100644 --- a/curs_lib.c +++ b/curs_lib.c @@ -44,6 +44,10 @@ #include #endif +#ifdef USE_NOTMUCH +#include "mutt_notmuch.h" +#endif + /* not possible to unget more than one char under some curses libs, and it * is impossible to unget function keys in SLang, so roll our own input * buffering routines. @@ -655,10 +659,6 @@ int _mutt_enter_fname (const char *prompt, char *buf, size_t blen, _mutt_select_file (buf, blen, flags, files, numfiles); *redraw = REDRAW_FULL; } - else if (flags & M_SEL_VFOLDER) { - _mutt_select_file (buf, blen, flags, files, numfiles); - *redraw = REDRAW_FULL; - } else { char *pc = safe_malloc (mutt_strlen (prompt) + 3); @@ -670,6 +670,10 @@ int _mutt_enter_fname (const char *prompt, char *buf, size_t blen, buf[0] = 0; MAYBE_REDRAW (*redraw); FREE (&pc); +#ifdef USE_NOTMUCH + if ((flags & M_SEL_VFOLDER) && buf[0] && strncmp(buf, "notmuch://", 10) != 0) + nm_description_to_path(buf, buf, blen); +#endif } return 0; diff --git a/curs_main.c b/curs_main.c index 11ca9f755..b67fae3fe 100644 --- a/curs_main.c +++ b/curs_main.c @@ -1532,6 +1532,16 @@ int mutt_index_menu (void) break; } } +#ifdef USE_NOTMUCH + else if (op == OP_MAIN_CHANGE_VFOLDER) { + mutt_enter_vfolder (cp, buf, sizeof (buf), &menu->redraw, 1); + if (!buf[0]) + { + CLEARLINE (LINES-1); + break; + } + } +#endif else { mutt_buffy (buf, sizeof (buf)); @@ -1543,11 +1553,6 @@ int mutt_index_menu (void) break; strncpy (buf, path, sizeof (buf)); } else -#endif -#ifdef USE_NOTMUCH - if (op == OP_MAIN_CHANGE_VFOLDER) - mutt_enter_vfolder (cp, buf, sizeof (buf), &menu->redraw, 1); - else #endif if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) { diff --git a/mutt_notmuch.c b/mutt_notmuch.c index 5be51ebb3..a9a11edad 100644 --- a/mutt_notmuch.c +++ b/mutt_notmuch.c @@ -1664,6 +1664,23 @@ char *nm_get_description(CONTEXT *ctx) return NULL; } +int nm_description_to_path(const char *desc, char *buf, size_t bufsz) +{ + BUFFY *p; + + if (!desc || !buf || !bufsz) + return -EINVAL; + + for (p = VirtIncoming; p; p = p->next) + if (p->path && p->desc && strcmp(desc, p->desc) == 0) { + strncpy(buf, p->path, bufsz); + buf[bufsz - 1] = '\0'; + return 0; + } + + return -1; +} + /* * returns header from mutt context */ diff --git a/mutt_notmuch.h b/mutt_notmuch.h index e964af440..df4baa20a 100644 --- a/mutt_notmuch.h +++ b/mutt_notmuch.h @@ -20,6 +20,7 @@ void nm_longrun_init(CONTEXT *cxt, int writable); void nm_longrun_done(CONTEXT *cxt); char *nm_get_description(CONTEXT *ctx); +int nm_description_to_path(const char *desc, char *buf, size_t bufsz); int nm_record_message(CONTEXT *ctx, char *path, HEADER *h);