Nico Golde:
[apps/madmutt.git] / curs_main.c
index 7137100..28921a3 100644 (file)
  *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  */ 
 
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include "mutt.h"
 #include "mutt_curses.h"
 #include "mx.h"
@@ -385,7 +389,7 @@ static void update_index (MUTTMENU *menu, CONTEXT *ctx, int check,
   
   if (menu->current < 0)
     menu->current = ci_first_message ();
-
+  
 }
 
 static void resort_index (MUTTMENU *menu)
@@ -533,6 +537,8 @@ int mutt_index_menu (void)
           mutt_error _("Mailbox was externally modified.  Flags may be wrong.");
         else if (check == M_NEW_MAIL)
         {
+          /* on new mail: redraw sidebar */
+          draw_sidebar (CurrentMenu);
           mutt_message _("New mail in this mailbox.");
           if (option (OPTBEEPNEW))
             beep ();
@@ -558,8 +564,10 @@ int mutt_index_menu (void)
     {
      /* check for new mail in the incoming folders */
      oldcount = newcount;
-     if ((newcount = mutt_buffy_check (0)) != oldcount)
+     if ((newcount = mutt_buffy_check (0)) != oldcount){
        menu->redraw |= REDRAW_STATUS;
+       menu->redraw |= REDRAW_SIDEBAR;
+     } 
      if (do_buffy_notify)
      {
        if (mutt_buffy_notify () && option (OPTBEEPNEW))
@@ -571,7 +579,7 @@ int mutt_index_menu (void)
 
     if (op != -1)
       mutt_curs_set (0);
-
+    if (menu->redraw & REDRAW_SIDEBAR) draw_sidebar(menu->menu);
     if (menu->redraw & REDRAW_FULL)
     {
       menu_redraw_full (menu);
@@ -605,6 +613,7 @@ int mutt_index_menu (void)
         SETCOLOR (MT_COLOR_STATUS);
         mutt_paddstr (COLS, buf);
         SETCOLOR (MT_COLOR_NORMAL);
+        set_buffystats (Context);
         menu->redraw &= ~REDRAW_STATUS;
         if (option(OPTXTERMSETTITLES))
         {
@@ -1121,6 +1130,9 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE);
         else
         {
           mutt_set_flag (Context, CURHDR, M_TAG, !CURHDR->tagged);
+          Context->last_tag = CURHDR->tagged ? CURHDR :
+            ((Context->last_tag == CURHDR && !CURHDR->tagged)
+            ? NULL : Context->last_tag);
           menu->redraw = REDRAW_STATUS;
           if (option (OPTRESOLVE) && menu->current < Context->vcount - 1)
           {
@@ -1175,6 +1187,9 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE);
       
       case OP_MAIN_SYNC_FOLDER:
 
+       if (Context && !Context->msgcount)
+         break;
+
         CHECK_MSGCOUNT;
         CHECK_VISIBLE;
         CHECK_READONLY;
@@ -1389,7 +1404,7 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE);
 
         if ((menu->menu == MENU_MAIN)
             && (query_quadoption (OPT_QUIT, 
-                                  _("Exit Mutt without saving?")) == M_YES))
+                                  _("Exit Mutt-ng without saving?")) == M_YES))
         {
           if (Context)
           {
@@ -1416,6 +1431,86 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE);
           menu->redraw = REDRAW_CURRENT;
         break;
 
+      case OP_MAIN_BREAK_THREAD:
+
+        CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+        CHECK_READONLY;
+
+        if ((Sort & SORT_MASK) != SORT_THREADS)
+          mutt_error _("Threading is not enabled.");
+
+#if defined (USE_IMAP) && ! defined (IMAP_EDIT_THREADS)
+        else if (Context->magic == M_IMAP)
+          mutt_error _("Compile Mutt with --enable-imap-edit-threads for break-thread support");
+#endif
+        else
+        {
+          {
+            HEADER *oldcur = CURHDR;
+
+            mutt_break_thread (CURHDR);
+            mutt_sort_headers (Context, 1);
+            menu->current = oldcur->virtual;
+          }
+
+          Context->changed = 1;
+          mutt_message _("Thread broken");
+
+          if (menu->menu == MENU_PAGER)
+          {
+            op = OP_DISPLAY_MESSAGE;
+            continue;
+          }
+          else
+            menu->redraw |= REDRAW_INDEX;
+        }
+        break;
+
+      case OP_MAIN_LINK_THREADS:
+
+        CHECK_MSGCOUNT;
+        CHECK_VISIBLE;
+        CHECK_READONLY;
+
+        if ((Sort & SORT_MASK) != SORT_THREADS)
+          mutt_error _("Threading is not enabled.");
+
+#if defined (USE_IMAP) && ! defined (IMAP_EDIT_THREADS)
+        else if (Context->magic == M_IMAP)
+          mutt_error _("Compile Mutt with --enable-imap-edit-threads for link-threads support");
+#endif
+
+        else if (!CURHDR->env->message_id)
+          mutt_error _("No Message-ID: header available to link thread");
+        else if (!tag && (!Context->last_tag || !Context->last_tag->tagged))
+          mutt_error _("First, please tag a message to be linked here");
+        else 
+        {
+          HEADER *oldcur = CURHDR;
+
+          if (mutt_link_threads (CURHDR, tag ? NULL : Context->last_tag,
+                                 Context))
+          {
+            mutt_sort_headers (Context, 1);
+            menu->current = oldcur->virtual;
+            
+            Context->changed = 1;
+            mutt_message _("Threads linked");
+          }
+          else
+            mutt_error _("No thread linked");
+        }
+
+        if (menu->menu == MENU_PAGER)
+        {
+          op = OP_DISPLAY_MESSAGE;
+          continue;
+        }
+        else
+          menu->redraw |= REDRAW_STATUS | REDRAW_INDEX;
+        break;
+
       case OP_MAIN_NEXT_UNDELETED:
 
         CHECK_MSGCOUNT;
@@ -2077,6 +2172,8 @@ CHECK_IMAP_ACL(IMAP_ACL_INSERT);
         }
 #endif
 
+       if (option (OPTPGPAUTODEC) && (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED))) 
+         mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw);
         mutt_edit_message (Context, tag ? NULL : CURHDR);
         menu->redraw = REDRAW_FULL;
 
@@ -2145,7 +2242,9 @@ CHECK_IMAP_ACL(IMAP_ACL_INSERT);
           break;
         CHECK_MSGCOUNT; 
         CHECK_VISIBLE;
-        mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw);
+        if (tag || !(CURHDR->security & PGP_TRADITIONAL_CHECKED)) 
+         mutt_check_traditional_pgp (tag ? NULL : CURHDR, &menu->redraw);
+      
         if (menu->menu == MENU_PAGER)
         {
           op = OP_DISPLAY_MESSAGE;
@@ -2227,7 +2326,11 @@ CHECK_IMAP_ACL(IMAP_ACL_SEEN);
       case OP_FORWARD_TO_GROUP:
 
         CHECK_ATTACH;
-        if (op != OP_FOLLOWUP || !CURHDR->env->followup_to ||
+        if ((op == OP_FOLLOWUP || op == OP_FORWARD_TO_GROUP) &&
+            Context && Context->msgcount == 0) {
+          mutt_error (_("There are no messages."));
+          sleep (2);
+        } else if (op != OP_FOLLOWUP || !CURHDR->env->followup_to ||
             mutt_strcasecmp (CURHDR->env->followup_to, "poster") ||
             query_quadoption (OPT_FOLLOWUPTOPOSTER,_("Reply by mail as poster prefers?")) != M_YES)
         {
@@ -2357,6 +2460,7 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE);
 
       case OP_BUFFY_LIST:
         mutt_buffy_list ();
+        menu->redraw = REDRAW_FULL;
         break;
 
       case OP_VIEW_ATTACHMENTS:
@@ -2379,6 +2483,8 @@ CHECK_IMAP_ACL(IMAP_ACL_DELETE);
       case OP_SIDEBAR_SCROLL_DOWN:
       case OP_SIDEBAR_NEXT:
       case OP_SIDEBAR_PREV:
+      case OP_SIDEBAR_NEXT_NEW:
+      case OP_SIDEBAR_PREV_NEW:
         scroll_sidebar(op, menu->menu);
             break;
       default: