license statements.
[apps/madmutt.git] / curs_main.c
index 09f28a1..fe65287 100644 (file)
 # include "config.h"
 #endif
 
+#include <lib-lib/mem.h>
+#include <lib-lib/str.h>
+#include <lib-lib/macros.h>
+
 #include "mutt.h"
 #include "mutt_curses.h"
 #include "mx.h"
@@ -45,9 +49,6 @@
 #include "mutt_sasl.h"
 #endif
 
-#include "lib/mem.h"
-#include "lib/intl.h"
-#include "lib/str.h"
 #include "lib/debug.h"
 
 #include <ctype.h>
@@ -110,6 +111,7 @@ static const char *No_visible = N_("No visible messages.");
 #define CURHDR Context->hdrs[Context->v2r[menu->current]]
 #define OLDHDR Context->hdrs[Context->v2r[menu->oldcurrent]]
 #define UNREAD(h) mutt_thread_contains_unread (Context, h)
+#define SW              (option(OPTMBOXPANE)?SidebarWidth:0)
 
 extern const char *ReleaseDate;
 extern size_t UngetCount;
@@ -297,9 +299,7 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check,
 
   /* save the list of new messages */
   if (oldcount && check != M_REOPENED && ((Sort & SORT_MASK) == SORT_THREADS)) {
-    save_new =
-      (HEADER **) mem_malloc (sizeof (HEADER *) *
-                               (Context->msgcount - oldcount));
+    save_new = p_new(HEADER*, Context->msgcount - oldcount);
     for (j = oldcount; j < Context->msgcount; j++)
       save_new[j - oldcount] = Context->hdrs[j];
   }
@@ -331,7 +331,7 @@ static void update_index (MUTTMENU * menu, CONTEXT * ctx, int check,
             mutt_uncollapse_thread (Context, h);
         }
       }
-      mem_free (&save_new);
+      p_delete(&save_new);
       mutt_set_virtual (Context);
     }
   }
@@ -385,7 +385,7 @@ struct mapping_t IndexHelp[] = {
   {N_("Reply"), OP_REPLY},
   {N_("Group"), OP_GROUP_REPLY},
   {N_("Help"), OP_HELP},
-  {NULL}
+  {NULL, OP_NULL}
 };
 
 #ifdef USE_NNTP
@@ -398,7 +398,7 @@ struct mapping_t IndexNewsHelp[] = {
   {N_("Followup"), OP_FOLLOWUP},
   {N_("Catchup"), OP_CATCHUP},
   {N_("Help"), OP_HELP},
-  {NULL}
+  {NULL, OP_NULL}
 };
 #endif
 
@@ -483,7 +483,7 @@ int mutt_index_menu (void)
       if ((check = mx_check_mailbox (Context, &index_hint, 0)) < 0) {
         if (!Context->path) {
           /* fatal error occurred */
-          mem_free (&Context);
+          p_delete(&Context);
           menu->redraw = REDRAW_FULL;
         }
         set_option (OPTSEARCHINVALID);
@@ -561,13 +561,13 @@ int mutt_index_menu (void)
       }
 
       if (menu->redraw & REDRAW_STATUS) {
-        DrawFullLine = 1;
         menu_status_line (buf, sizeof (buf), menu, NONULL (Status));
-        DrawFullLine = 0;
         CLEARLINE (option (OPTSTATUSONTOP) ? 0 : LINES - 2);
+        sidebar_draw_frames();
         SETCOLOR (MT_COLOR_STATUS);
         BKGDSET (MT_COLOR_STATUS);
-        mutt_paddstr (COLS, buf);
+        move(option (OPTSTATUSONTOP) ? 0 : LINES - 2,SW);
+        mutt_paddstr (COLS-SW, buf);
         SETCOLOR (MT_COLOR_NORMAL);
         BKGDSET (MT_COLOR_NORMAL);
         sidebar_set_buffystats (Context);
@@ -594,10 +594,6 @@ int mutt_index_menu (void)
         move (menu->current - menu->top + menu->offset, COLS - 1);
       mutt_refresh ();
 
-      op = km_dokey (MENU_MAIN);
-
-      debug_print (4, ("Got op %d\n", op));
-
 #if defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM)
       if (SigWinch) {
         mutt_flushinp ();
@@ -615,6 +611,10 @@ int mutt_index_menu (void)
       }
 #endif
 
+      op = km_dokey (MENU_MAIN);
+
+      debug_print (4, ("Got op %d\n", op));
+
       if (op == -1)
         continue;               /* either user abort or timeout */
 
@@ -755,7 +755,7 @@ int mutt_index_menu (void)
 
         if (op == OP_GET_MESSAGE) {
           buf[0] = 0;
-          if (mutt_get_field (_("Enter Message-Id: "), buf, sizeof (buf), 0)
+          if (mutt_get_field (_("Enter Message-ID: "), buf, sizeof (buf), 0)
               != 0 || !buf[0])
             break;
         }
@@ -806,7 +806,7 @@ int mutt_index_menu (void)
         int old = CURHDR->index, i;
 
         if (!CURHDR->env->message_id) {
-          mutt_error (_("No Message-Id. Unable to perform operation"));
+          mutt_error (_("No Message-ID. Unable to perform operation"));
 
           break;
         }
@@ -965,8 +965,8 @@ int mutt_index_menu (void)
             snprintf (buf, sizeof (buf), "~A");
           unset_option (OPTHIDEREAD);
         }
-        mem_free (&Context->pattern);
-        Context->pattern = str_dup (buf);
+        p_delete(&Context->pattern);
+        Context->pattern = m_strdup(buf);
       }
       if ((op == OP_TOGGLE_READ && mutt_pattern_func (M_LIMIT, NULL) == 0) ||
           mutt_pattern_func (M_LIMIT, _("Limit to messages matching: ")) == 0)
@@ -989,6 +989,8 @@ int mutt_index_menu (void)
           mutt_draw_tree (Context);
         menu->redraw = REDRAW_FULL;
       }
+      if (Context->pattern)
+        mutt_message _("To view all messages, limit to \"all\".");
       break;
 
     case OP_QUIT:
@@ -1151,7 +1153,7 @@ int mutt_index_menu (void)
 
       /* check for a fatal error, or all messages deleted */
       if (!Context->path)
-        mem_free (&Context);
+        p_delete(&Context);
 
       /* if we were in the pager, redisplay the message */
       if (menu->menu == MENU_PAGER) {
@@ -1208,9 +1210,13 @@ int mutt_index_menu (void)
       if (op == OP_SIDEBAR_OPEN) {
         strncpy (buf, NONULL(sidebar_get_current ()), sizeof (buf));
       }
-      else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) ==
-               -1)
-        break;
+      else if (mutt_enter_fname (cp, buf, sizeof (buf), &menu->redraw, 1) == -1) {
+        if (menu->menu == MENU_PAGER) {
+          op = OP_DISPLAY_MESSAGE;
+          continue;
+        } else
+          break;
+      }
       if (!buf[0]) {
         CLEARLINE (LINES - 1);
         break;
@@ -1250,7 +1256,7 @@ int mutt_index_menu (void)
           menu->redraw = REDRAW_INDEX | REDRAW_STATUS;
           break;
         }
-        mem_free (&Context);
+        p_delete(&Context);
       }
 
       mutt_sleep (0);
@@ -1333,7 +1339,7 @@ int mutt_index_menu (void)
       {
         if (Context) {
           mx_fastclose_mailbox (Context);
-          mem_free (&Context);
+          p_delete(&Context);
         }
         done = 1;
       }
@@ -2103,6 +2109,14 @@ int mutt_index_menu (void)
       CHECK_MSGCOUNT;
       CHECK_VISIBLE;
       mutt_pipe_message (tag ? NULL : CURHDR);
+#ifdef USE_IMAP
+      /* in an IMAP folder index with imap_peek=no, piping could change
+       * * new or old messages status to read. Redraw what's needed.
+       */
+      if (Context->magic == M_IMAP && !option (OPTIMAPPEEK)) {
+        menu->redraw = (tag ? REDRAW_INDEX : REDRAW_CURRENT) | REDRAW_STATUS;
+      }
+#endif
       MAYBE_REDRAW (menu->redraw);
       break;
 
@@ -2111,6 +2125,14 @@ int mutt_index_menu (void)
       CHECK_MSGCOUNT;
       CHECK_VISIBLE;
       mutt_print_message (tag ? NULL : CURHDR);
+#ifdef USE_IMAP
+      /* in an IMAP folder index with imap_peek=no, piping could change
+       * * new or old messages status to read. Redraw what's needed.
+       */
+      if (Context->magic == M_IMAP && !option (OPTIMAPPEEK)) {
+        menu->redraw = (tag ? REDRAW_INDEX : REDRAW_CURRENT) | REDRAW_STATUS;
+      }
+#endif
       break;
 
     case OP_MAIN_READ_THREAD:
@@ -2321,6 +2343,10 @@ int mutt_index_menu (void)
       mutt_what_key ();
       break;
 
+    case OP_REBUILD_CACHE:
+      mx_rebuild_cache ();
+      break;
+
     case OP_SIDEBAR_SCROLL_UP:
     case OP_SIDEBAR_SCROLL_DOWN:
     case OP_SIDEBAR_NEXT: