Hi, Vsevolod,

Could you help me identify what's wrong with my patching
patch-1.3.27.vvv.nntp?

There are a couple of failures reported for 3 files. (patch.err)

I have inspected browser.c. and its .rej but can not why - it looks it
should work. (browser.c.rej, buffy.c.rej and compose.c.rej)

Is it because I have an incompatible patch tool?

1. mutt-1.3.27i.tar.gz and patch-1.3.27.vvv.nntp are just downloaded
   yesterday.

2. my patch is patch-2.5.4-9mdk

3. my diff is diffutils-2.7-29mdk

4. It's Mandrake 8.1 box with locale zh_TW.Big.

Many thanks.

best regards,
charlie

$ patch -p0 < ../rpm/mutt/patch-1.3.27.vvv.nntp
patching file mutt-1.3.27/ChangeLog.nntp
patching file mutt-1.3.27/OPS
patching file mutt-1.3.27/PATCHES
patching file mutt-1.3.27/acconfig.h
patching file mutt-1.3.27/account.c
patching file mutt-1.3.27/account.h
patching file mutt-1.3.27/attach.h
patching file mutt-1.3.27/browser.c
Hunk #4 FAILED at 323.
Hunk #6 FAILED at 450.
Hunk #7 FAILED at 539.
Hunk #12 FAILED at 984.
Hunk #13 FAILED at 1046.
Hunk #14 FAILED at 1116.
Hunk #15 FAILED at 1371.
7 out of 15 hunks FAILED -- saving rejects to file mutt-1.3.27/browser.c.rej
patching file mutt-1.3.27/browser.h
patching file mutt-1.3.27/buffy.c
Hunk #2 succeeded at 278 with fuzz 2.
Hunk #3 FAILED at 299.
Hunk #4 FAILED at 379.
2 out of 4 hunks FAILED -- saving rejects to file mutt-1.3.27/buffy.c.rej
patching file mutt-1.3.27/commands.c
patching file mutt-1.3.27/complete.c
patching file mutt-1.3.27/compose.c
Hunk #10 FAILED at 598.
Hunk #11 FAILED at 828.
Hunk #12 FAILED at 838.
Hunk #13 succeeded at 868 with fuzz 2.
3 out of 13 hunks FAILED -- saving rejects to file mutt-1.3.27/compose.c.rej
patching file mutt-1.3.27/config.h.in
patching file mutt-1.3.27/configure.in
patching file mutt-1.3.27/curs_main.c
Hunk #5 succeeded at 657 with fuzz 1.
Hunk #6 succeeded at 710 with fuzz 2.
Hunk #7 FAILED at 915.
Hunk #8 FAILED at 1134.
Hunk #9 FAILED at 1181.
Hunk #10 FAILED at 1219.
Hunk #11 succeeded at 1526 with fuzz 1.
Hunk #12 succeeded at 1875 with fuzz 2.
Hunk #13 succeeded at 1920 with fuzz 2.
patch: **** malformed patch at line 2112: ue?")) != M_YES)

***************
*** 299,306 ****
    return (src);
  }
  
  static void add_folder (MUTTMENU *m, struct browser_state *state,
-                        const char *name, const struct stat *s, int new)
  {
    if (state->entrylen == state->entrymax)
    {
--- 323,408 ----
    return (src);
  }
  
+ #ifdef USE_NNTP
+ static const char *
+ newsgroup_format_str (char *dest, size_t destlen, char op, const char *src,
+                       const char *fmt, const char *ifstring, const char *elsestring,
+                       unsigned long data, format_flag flags)
+ {
+   char fn[SHORT_STRING], tmp[SHORT_STRING];
+   FOLDER *folder = (FOLDER *) data;
+ 
+   switch (op)
+   {
+     case 'C':
+       snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+       snprintf (dest, destlen, tmp, folder->num + 1);
+       break;
+       
+     case 'f':
+       strncpy (fn, folder->ff->name, sizeof(fn) - 1);
+       snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+       snprintf (dest, destlen, tmp, fn);
+       break;
+ 
+     case 'N':
+       snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+       if (folder->ff->nd->subscribed)
+        snprintf (dest, destlen, tmp, ' ');
+       else
+        snprintf (dest, destlen, tmp, folder->ff->new ? 'N' : 'u');
+       break;
+ 
+     case 'M':
+       snprintf (tmp, sizeof (tmp), "%%%sc", fmt);
+       if (folder->ff->nd->deleted)
+        snprintf (dest, destlen, tmp, 'D');
+       else
+        snprintf (dest, destlen, tmp, folder->ff->nd->allowed ? ' ' : '-');
+       break;
+ 
+     case 's':
+       if (flags & M_FORMAT_OPTIONAL)
+       {
+        if (folder->ff->nd->unread != 0)
+          mutt_FormatString (dest, destlen, ifstring, newsgroup_format_str,
+                data, flags);
+        else
+          mutt_FormatString (dest, destlen, elsestring, newsgroup_format_str,
+                data, flags);
+       }
+       else if (Context && Context->data == folder->ff->nd)
+       {
+        snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+        snprintf (dest, destlen, tmp, Context->unread);
+       }
+       else
+       {
+        snprintf (tmp, sizeof (tmp), "%%%sd", fmt);
+        snprintf (dest, destlen, tmp, folder->ff->nd->unread);
+       }
+       break;
+ 
+     case 'd':
+       if (folder->ff->nd->desc != NULL)
+       {
+        snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+        snprintf (dest, destlen, tmp, folder->ff->nd->desc);
+       }
+       else
+       {
+        snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
+        snprintf (dest, destlen, tmp, "");
+       }
+       break;
+   }
+   return (src);
+ }
+ #endif /* USE_NNTP */
+ 
  static void add_folder (MUTTMENU *m, struct browser_state *state,
+                        const char *name, const struct stat *s,
+                        void *data, int new)
  {
    if (state->entrylen == state->entrymax)
    {
***************
*** 344,352 ****
      menu->data = state->entry;
  }
  
  static int examine_directory (MUTTMENU *menu, struct browser_state *state,
                               char *d, const char *prefix)
  {
    struct stat s;
    DIR *dp;
    struct dirent *de;
--- 450,484 ----
      menu->data = state->entry;
  }
  
+ /* get list of all files/newsgroups with mask */
  static int examine_directory (MUTTMENU *menu, struct browser_state *state,
                               char *d, const char *prefix)
  {
+ #ifdef USE_NNTP
+   if (option (OPTNEWS))
+   {
+     LIST *tmp;
+     NNTP_DATA *data;
+     NNTP_SERVER *news = CurrentNewsSrv;
+ 
+ /*  mutt_buffy_check (0); */
+     init_state (state, menu);
+ 
+     for (tmp = news->list; tmp; tmp = tmp->next)
+     {
+       if (!(data = (NNTP_DATA *)tmp->data))
+        continue;
+       if (prefix && *prefix && strncmp (prefix, data->group,
+            strlen (prefix)) != 0)
+        continue;
+       if (!((regexec (Mask.rx, data->group, 0, NULL, 0) == 0) ^ Mask.not))
+        continue;
+       add_folder (menu, state, data->group, NULL, data, data->new);
+     }
+   }
+   else
+ #endif /* USE_NNTP */
+   {
    struct stat s;
    DIR *dp;
    struct dirent *de;
***************
*** 407,466 ****
      tmp = Incoming;
      while (tmp && mutt_strcmp (buffer, tmp->path))
        tmp = tmp->next;
-     add_folder (menu, state, de->d_name, &s, (tmp) ? tmp->new : 0);
    }
-   closedir (dp);  
    browser_sort (state);
    return 0;
  }
  
  static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state)
  {
    struct stat s;
    char buffer[LONG_STRING];
-   BUFFY *tmp = Incoming;
  
-   if (!Incoming)
-     return (-1);
-   mutt_buffy_check (0);
  
-   init_state (state, menu);
  
-   do
-   {
- #ifdef USE_IMAP
-     if (mx_is_imap (tmp->path))
      {
-       add_folder (menu, state, tmp->path, NULL, tmp->new);
-       continue;
      }
  #endif
- #ifdef USE_POP
-     if (mx_is_pop (tmp->path))
      {
-       add_folder (menu, state, tmp->path, NULL, tmp->new);
-       continue;
-     }
  #endif
-     if (lstat (tmp->path, &s) == -1)
-       continue;
  
-     if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) &&
-        (! S_ISLNK (s.st_mode)))
-       continue;
      
-     strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
-     mutt_pretty_mailbox (buffer);
  
-     add_folder (menu, state, buffer, &s, tmp->new);
    }
-   while ((tmp = tmp->next));
    browser_sort (state);
    return 0;
  }
  
  int select_file_search (MUTTMENU *menu, regex_t *re, int n)
  {
    return (regexec (re, ((struct folder_file *) menu->data)[n].name, 0, NULL, 0));
  }
  
--- 539,633 ----
      tmp = Incoming;
      while (tmp && mutt_strcmp (buffer, tmp->path))
        tmp = tmp->next;
+     add_folder (menu, state, de->d_name, &s, NULL, (tmp) ? tmp->new : 0);
+   }
+   closedir (dp);
    }
    browser_sort (state);
    return 0;
  }
  
+ /* get list of mailboxes/subscribed newsgroups */
  static int examine_mailboxes (MUTTMENU *menu, struct browser_state *state)
  {
    struct stat s;
    char buffer[LONG_STRING];
  
+ #ifdef USE_NNTP
+   if (option (OPTNEWS))
+   {
+     LIST *tmp;
+     NNTP_DATA *data;
+     NNTP_SERVER *news = CurrentNewsSrv;
  
+ /*  mutt_buffy_check (0); */
+     init_state (state, menu);
  
+     for (tmp = news->list; tmp; tmp = tmp->next)
      {
+       if ((data = (NNTP_DATA *) tmp->data) != NULL && (data->new ||
+          (data->subscribed && (!option (OPTSHOWONLYUNREAD) || data->unread))))
+       add_folder (menu, state, data->group, NULL, data, data->new);
      }
+   }
+   else
  #endif
+   {
+     BUFFY *tmp = Incoming;
+ 
+     if (!Incoming)
+       return (-1);
+     mutt_buffy_check (0);
+ 
+     init_state (state, menu);
+ 
+     do
      {
+ #ifdef USE_IMAP
+       if (mx_is_imap (tmp->path))
+       {
+        add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
+        continue;
+       }
  #endif
+ #ifdef USE_POP
+       if (mx_is_pop (tmp->path))
+       {
+        add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
+        continue;
+       }
+ #endif
+ #ifdef USE_NNTP
+       if (mx_is_nntp (tmp->path))
+       {
+        add_folder (menu, state, tmp->path, NULL, NULL, tmp->new);
+        continue;
+       }
+ #endif
+       if (lstat (tmp->path, &s) == -1)
+        continue;
  
+       if ((! S_ISREG (s.st_mode)) && (! S_ISDIR (s.st_mode)) &&
+          (! S_ISLNK (s.st_mode)))
+        continue;
      
+       strfcpy (buffer, NONULL(tmp->path), sizeof (buffer));
+       mutt_pretty_mailbox (buffer);
  
+       add_folder (menu, state, buffer, &s, NULL, tmp->new);
+     }
+     while ((tmp = tmp->next));
    }
    browser_sort (state);
    return 0;
  }
  
  int select_file_search (MUTTMENU *menu, regex_t *re, int n)
  {
+ #ifdef USE_NNTP
+   if (option (OPTNEWS))
+     return (regexec (re, ((struct folder_file *) menu->data)[n].desc, 0, NULL, 0));
+ #endif
    return (regexec (re, ((struct folder_file *) menu->data)[n].name, 0, NULL, 0));
  }
  
***************
*** 772,778 ****
           }
         }
  
         if (buffy)
         {
           strfcpy (f, state.entry[menu->current].name, flen);
           mutt_expand_path (f, flen);
--- 984,994 ----
           }
         }
  
+ #ifdef USE_NNTP
+        if (buffy || option (OPTNEWS)) /* news have not path */
+ #else
         if (buffy)
+ #endif
         {
           strfcpy (f, state.entry[menu->current].name, flen);
           mutt_expand_path (f, flen);
***************
*** 830,843 ****
          break;
  
  #ifdef USE_IMAP
-       case OP_BROWSER_SUBSCRIBE:
-        imap_subscribe (state.entry[menu->current].name, 1);
-        break;
- 
-       case OP_BROWSER_UNSUBSCRIBE:
-        imap_subscribe (state.entry[menu->current].name, 0);
-        break;
- 
        case OP_BROWSER_TOGGLE_LSUB:
         if (option (OPTIMAPLSUB))
         {
--- 1046,1051 ----
          break;
  
  #ifdef USE_IMAP
        case OP_BROWSER_TOGGLE_LSUB:
         if (option (OPTIMAPLSUB))
         {
***************
*** 908,913 ****
        
        case OP_CHANGE_DIRECTORY:
  
         strfcpy (buf, LastDir, sizeof (buf));
  #ifdef USE_IMAP
         if (!state.imap_browse)
--- 1116,1126 ----
        
        case OP_CHANGE_DIRECTORY:
  
+ #ifdef USE_NNTP
+        if (option (OPTNEWS))
+          break;
+ #endif
+ 
         strfcpy (buf, LastDir, sizeof (buf));
  #ifdef USE_IMAP
         if (!state.imap_browse)
***************
*** 1158,1163 ****
           else
             mutt_error _("Error trying to view file");
         }
      }
    }
    
--- 1371,1560 ----
           else
             mutt_error _("Error trying to view file");
         }
+        break;
+ 
+ #ifdef USE_NNTP
+       case OP_CATCHUP:
+       case OP_UNCATCHUP:
+        if (option (OPTNEWS))
+        {
+          struct folder_file *f = &state.entry[menu->current];
+          NNTP_DATA *nd;
+ 
+          if (i == OP_CATCHUP)
+            nd = mutt_newsgroup_catchup (CurrentNewsSrv, f->name);
+          else
+            nd = mutt_newsgroup_uncatchup (CurrentNewsSrv, f->name);
+ 
+          if (nd)
+          {
+ /*         FOLDER folder;
+            struct folder_file ff;
+            char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+ 
+            folder.ff = &ff;
+            folder.ff->name = f->name;
+            folder.ff->st = NULL;
+            folder.ff->is_new = nd->new;
+            folder.ff->nd = nd;
+            safe_free ((void **) &f->desc);
+            mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat),
+                  newsgroup_format_str, (unsigned long) &folder,
+                  M_FORMAT_ARROWCURSOR);
+            f->desc = safe_strdup (buffer); */
+            if (menu->current + 1 < menu->max)
+              menu->current++;
+            menu->redraw = REDRAW_MOTION_RESYNCH;
+          }
+        }
+        break;
+ 
+       case OP_LOAD_ACTIVE:
+        if (!option (OPTNEWS))
+          break;
+ 
+        {
+          LIST *tmp;
+          NNTP_DATA *data;
+ 
+          for (tmp = CurrentNewsSrv->list; tmp; tmp = tmp->next)
+          {
+            if ((data = (NNTP_DATA *)tmp->data))
+              data->deleted = 1;
+          }
+        }
+        nntp_get_active (CurrentNewsSrv);
+ 
+        destroy_state (&state);
+        if (buffy)
+          examine_mailboxes (menu, &state);
+        else
+          examine_directory (menu, &state, NULL, NULL);
+        init_menu (&state, menu, title, sizeof (title), buffy);
+        break;
+ #endif /* USE_NNTP */
+ 
+ #if defined USE_IMAP || defined USE_NNTP
+       case OP_BROWSER_SUBSCRIBE:
+       case OP_BROWSER_UNSUBSCRIBE:
+ #endif
+ #ifdef USE_NNTP
+       case OP_SUBSCRIBE_PATTERN:
+       case OP_UNSUBSCRIBE_PATTERN:
+         if (option (OPTNEWS))
+        {
+          regex_t *rx = (regex_t *) safe_malloc (sizeof (regex_t));
+          char *s = buf;
+          int j = menu->current;
+          NNTP_DATA *nd;
+          NNTP_SERVER *news = CurrentNewsSrv;
+ 
+          if (i == OP_SUBSCRIBE_PATTERN || i == OP_UNSUBSCRIBE_PATTERN)
+          {
+            char tmp[STRING];
+            int err;
+ 
+            buf[0] = 0;
+            if (i == OP_SUBSCRIBE_PATTERN)
+              snprintf (tmp, sizeof (tmp), _("Subscribe pattern: "));
+            else
+              snprintf (tmp, sizeof (tmp), _("Unsubscribe pattern: "));
+            if (mutt_get_field (tmp, buf, sizeof (buf), 0) != 0 || !buf[0])
+            {
+              FREE (&rx);
+              break;
+            }
+ 
+            if ((err = REGCOMP (rx, s, REG_NOSUB)) != 0)
+            {
+              regerror (err, rx, buf, sizeof (buf));
+              regfree (rx);
+              safe_free ((void **) &rx);
+              mutt_error ("%s", buf);
+              break;
+            }
+            menu->redraw = REDRAW_FULL;
+            j = 0;
+          }
+          else if (!state.entrylen)
+          {
+            mutt_error _("No newsgroups match the mask");
+            break;
+          }
+ 
+          for ( ; j < state.entrylen; j++)
+          {
+            struct folder_file *f = &state.entry[j];
+ 
+            if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE ||
+                  regexec (rx, f->name, 0, NULL, 0) == 0)
+            {
+              if (i == OP_BROWSER_SUBSCRIBE || i == OP_SUBSCRIBE_PATTERN)
+                nd = mutt_newsgroup_subscribe (news, f->name);
+              else
+                nd = mutt_newsgroup_unsubscribe (news, f->name);
+ /*           if (nd)
+              {
+                FOLDER folder;
+                char buffer[_POSIX_PATH_MAX + SHORT_STRING];
+ 
+                folder.name = f->name;
+                folder.f = NULL;
+                folder.new = nd->new;
+                folder.nd = nd;
+                safe_free ((void **) &f->desc);
+                mutt_FormatString (buffer, sizeof (buffer), NONULL(GroupFormat),
+                        newsgroup_format_str, (unsigned long) &folder,
+                        M_FORMAT_ARROWCURSOR);
+                f->desc = safe_strdup (buffer);
+              } */
+            }
+            if (i == OP_BROWSER_SUBSCRIBE || i == OP_BROWSER_UNSUBSCRIBE)
+            {
+              if (menu->current + 1 < menu->max)
+                menu->current++;
+              menu->redraw = REDRAW_MOTION_RESYNCH;
+              break;
+            }
+          }
+          if (i == OP_SUBSCRIBE_PATTERN)
+          {
+            LIST *grouplist = NULL;
+ 
+            if (news)
+              grouplist = news->list;
+            for (; grouplist; grouplist = grouplist->next)
+            {
+              nd = (NNTP_DATA *) grouplist->data;
+              if (nd && nd->group && !nd->subscribed)
+              {
+                if (regexec (rx, nd->group, 0, NULL, 0) == 0)
+                {
+                  mutt_newsgroup_subscribe (news, nd->group);
+                  add_folder (menu, &state, nd->group, NULL, nd, nd->new);
+                }
+              }
+            }
+            init_menu (&state, menu, title, sizeof (title), buffy);
+          }
+          mutt_newsrc_update (news);
+          nntp_clear_cacheindex (news);
+          if (i != OP_BROWSER_SUBSCRIBE && i != OP_BROWSER_UNSUBSCRIBE)
+            regfree (rx);
+          safe_free ((void **) &rx);
+        }
+ #ifdef USE_IMAP
+        else
+ #endif /* USE_IMAP && USE_NNTP */
+ #endif /* USE_NNTP */
+ #ifdef USE_IMAP
+        {
+          if (i == OP_BROWSER_SUBSCRIBE)
+            imap_subscribe (state.entry[menu->current].name, 1);
+          else
+            imap_subscribe (state.entry[menu->current].name, 0);
+        }
+ #endif /* USE_IMAP */
      }
    }
    
***************
*** 291,315 ****
      /* check to see if the folder is the currently selected folder
       * before polling */
      if (!Context || !Context->path ||
- #if defined USE_IMAP || defined USE_POP
-        ((
  #ifdef USE_IMAP
-        tmp->magic == M_IMAP
  #endif
  #ifdef USE_POP
- #ifdef USE_IMAP
-        ||
- #endif
-        tmp->magic == M_POP
- #endif
-        ) ? mutt_strcmp (tmp->path, Context->path) :
  #endif
-         (sb.st_dev != contex_sb.st_dev || sb.st_ino != contex_sb.st_ino)
- #if defined USE_IMAP || defined USE_POP         
-            )
  #endif
-        )
-        
      {
        switch (tmp->magic)
        {
--- 299,319 ----
      /* check to see if the folder is the currently selected folder
       * before polling */
      if (!Context || !Context->path ||
+         (
+           (0
  #ifdef USE_IMAP
+            || tmp->magic == M_IMAP
  #endif
  #ifdef USE_POP
+            || tmp->magic == M_POP
  #endif
+ #ifdef USE_NNTP
+            || tmp->magic == M_NNTP
  #endif
+           ) ? mutt_strcmp (tmp->path, Context->path) :
+               (sb.st_dev != contex_sb.st_dev || sb.st_ino != contex_sb.st_ino)
+         )
+        )
      {
        switch (tmp->magic)
        {
***************
*** 375,380 ****
  
  #ifdef USE_POP
        case M_POP:
         break;
  #endif
        }
--- 379,389 ----
  
  #ifdef USE_POP
        case M_POP:
+        break;
+ #endif
+ 
+ #ifdef USE_NNTP
+       case M_NNTP:
         break;
  #endif
        }
***************
*** 532,545 ****
         menu->redraw = edit_address_list (HDR_FROM, &msg->env->from);
         break;
        case OP_COMPOSE_EDIT_TO:
-        menu->redraw = edit_address_list (HDR_TO, &msg->env->to);
         break;
        case OP_COMPOSE_EDIT_BCC:
-        menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc);
         break;
        case OP_COMPOSE_EDIT_CC:
-        menu->redraw = edit_address_list (HDR_CC, &msg->env->cc);
         break;
        case OP_COMPOSE_EDIT_SUBJECT:
         if (msg->env->subject)
           strfcpy (buf, msg->env->subject, sizeof (buf));
--- 598,678 ----
         menu->redraw = edit_address_list (HDR_FROM, &msg->env->from);
         break;
        case OP_COMPOSE_EDIT_TO:
+ #ifdef USE_NNTP
+        if (!news)
+ #endif
+          menu->redraw = edit_address_list (HDR_TO, &msg->env->to);
         break;
        case OP_COMPOSE_EDIT_BCC:
+ #ifdef USE_NNTP
+        if (!news)
+ #endif
+          menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc);
         break;
        case OP_COMPOSE_EDIT_CC:
+ #ifdef USE_NNTP
+        if (!news)
+ #endif
+          menu->redraw = edit_address_list (HDR_CC, &msg->env->cc);
+        break;
+ #ifdef USE_NNTP
+       case OP_COMPOSE_EDIT_NEWSGROUPS:
+        if (news)
+        {
+          if (msg->env->newsgroups)
+            strfcpy (buf, msg->env->newsgroups, sizeof (buf));
+          else
+            buf[0] = 0;
+          if (mutt_get_field ("Newsgroups: ", buf, sizeof (buf), 0) == 0 && buf[0])
+          {
+            safe_free ((void **) &msg->env->newsgroups);
+            mutt_remove_trailing_ws (buf);
+            msg->env->newsgroups = safe_strdup (mutt_skip_whitespace (buf));
+            move (HDR_TO, HDR_XOFFSET);
+            clrtoeol ();
+            if (msg->env->newsgroups)
+              printw ("%-*.*s", W, W, msg->env->newsgroups);
+          }
+        }
+        break;
+ 
+       case OP_COMPOSE_EDIT_FOLLOWUP_TO:
+        if (news)
+        {
+          buf[0] = 0;
+          if (msg->env->followup_to)
+            strfcpy (buf, msg->env->followup_to, sizeof (buf));
+          if (mutt_get_field ("Followup-To: ", buf, sizeof (buf), 0) == 0 && buf[0])
+          {
+            safe_free ((void **) &msg->env->followup_to);
+            mutt_remove_trailing_ws (buf);
+            msg->env->followup_to = safe_strdup (mutt_skip_whitespace (buf));
+            move (HDR_CC, HDR_XOFFSET);
+            clrtoeol();
+            if (msg->env->followup_to)
+              printw ("%-*.*s", W, W, msg->env->followup_to);
+          }
+        }
         break;
+ 
+       case OP_COMPOSE_EDIT_X_COMMENT_TO:
+        if (news && option (OPTXCOMMENTTO))
+        {
+          buf[0] = 0;
+          if (msg->env->x_comment_to)
+            strfcpy (buf, msg->env->x_comment_to, sizeof (buf));
+          if (mutt_get_field ("X-Comment-To: ", buf, sizeof (buf), 0) == 0 && buf[0])
+          {
+            safe_free ((void **) &msg->env->x_comment_to);
+            msg->env->x_comment_to = safe_strdup (buf);
+            move (HDR_BCC, HDR_XOFFSET);
+            clrtoeol();
+            if (msg->env->x_comment_to)
+              printw ("%-*.*s", W, W, msg->env->x_comment_to);
+          }
+        }
+        break;
+ #endif
        case OP_COMPOSE_EDIT_SUBJECT:
         if (msg->env->subject)
           strfcpy (buf, msg->env->subject, sizeof (buf));
***************
*** 695,700 ****
         break;
  
        case OP_COMPOSE_ATTACH_MESSAGE:
         {
           char *prompt;
           HEADER *h;
--- 828,836 ----
         break;
  
        case OP_COMPOSE_ATTACH_MESSAGE:
+ #ifdef USE_NNTP
+       case OP_COMPOSE_ATTACH_NEWS_MESSAGE:
+ #endif
         {
           char *prompt;
           HEADER *h;
***************
*** 702,708 ****
           fname[0] = 0;
           prompt = _("Open mailbox to attach message from");
  
           if (Context)
           {
             strfcpy (fname, NONULL (Context->path), sizeof (fname));
             mutt_pretty_mailbox (fname);
--- 838,859 ----
           fname[0] = 0;
           prompt = _("Open mailbox to attach message from");
  
+ #ifdef USE_NNTP
+          unset_option (OPTNEWS);
+          if (op == OP_COMPOSE_ATTACH_NEWS_MESSAGE)
+          {
+            if (!(CurrentNewsSrv = mutt_select_newsserver (NewsServer)))
+              break;
+ 
+            prompt = _("Open newsgroup to attach message from");
+            set_option (OPTNEWS);
+          }
+ #endif
+ 
           if (Context)
+ #ifdef USE_NNTP
+          if ((op == OP_COMPOSE_ATTACH_MESSAGE) ^ (Context->magic == M_NNTP))
+ #endif
           {
             strfcpy (fname, NONULL (Context->path), sizeof (fname));
             mutt_pretty_mailbox (fname);

Reply via email to