<<< Date Index >>>     <<< Thread Index >>>

Re: abort of edit-type in pager



Your patch looks like it will break the edit-type command both when
invoked directly from the attachment list, and when invoked from a
pager that is invoked from the attachment list.

On 2004-05-17 19:11:07 +0200, Anders Helmersson wrote:
> From: Anders Helmersson <anders.helmersson@xxxxxxxxx>
> To: mutt-dev@xxxxxxxx
> Date: Mon, 17 May 2004 19:11:07 +0200
> Subject: abort of edit-type in pager
> Mail-Followup-To: mutt-dev@xxxxxxxx
> X-Spam-Level: 
> 
> While reading a message I sometimes press edit-type (^E) in order to
> check the coding of the message or just by mistake. When I then press
> abort (^G) the pager jumps up to the top of the message and I have to
> scroll down to the place I was before. This is not the behavior I expect
> when aborting, since I would prefer to continue reading the message at
> the same spot I was before instead of jumping to the top.
> 
> In the present (1.5.6) implementation, the edit-type command is decoded
> in the index menu and the message is redisplayed if the edit-type
> command was issued in the pager.
> 
> In the attached patch (relative to the CVS head branch), the edit-type
> command is decoded in the pager. If aborted no action is taken,
> otherwise the message will be redisplayed as before even if the type
> wasn't changed.
> 
> 
> Anders Helmersson

> Index: commands.c
> ===================================================================
> RCS file: /home/roessler/cvs/mutt/commands.c,v
> retrieving revision 3.23
> diff -u -r3.23 commands.c
> --- commands.c        12 Apr 2004 20:33:33 -0000      3.23
> +++ commands.c        16 May 2004 17:00:17 -0000
> @@ -847,7 +847,7 @@
>    mutt_message ("Mutt %s (%s)", MUTT_VERSION, ReleaseDate);
>  }
>  
> -void mutt_edit_content_type (HEADER *h, BODY *b, FILE *fp)
> +int mutt_edit_content_type (HEADER *h, BODY *b, FILE *fp)
>  {
>    char buf[LONG_STRING];
>    char obuf[LONG_STRING];
> @@ -880,7 +880,7 @@
>    
>    if (mutt_get_field ("Content-Type: ", buf, sizeof (buf), 0) != 0 ||
>        buf[0] == 0)
> -    return;
> +    return -1;
>    
>    /* clean up previous junk */
>    mutt_free_parameter (&b->parameter);
> @@ -933,6 +933,7 @@
>  
>      h->security |= crypt_query (b);
>    }
> +  return 0;
>  }
>  
>  
> Index: curs_main.c
> ===================================================================
> RCS file: /home/roessler/cvs/mutt/curs_main.c,v
> retrieving revision 3.17
> diff -u -r3.17 curs_main.c
> --- curs_main.c       12 Apr 2004 20:33:33 -0000      3.17
> +++ curs_main.c       16 May 2004 17:00:25 -0000
> @@ -1170,14 +1170,7 @@
>          CHECK_VISIBLE;
>       CHECK_ATTACH;
>       mutt_edit_content_type (CURHDR, CURHDR->content, NULL);
> -     /* if we were in the pager, redisplay the message */
> -     if (menu->menu == MENU_PAGER)
> -     {
> -       op = OP_DISPLAY_MESSAGE;
> -       continue;
> -     }
> -        else
> -       menu->redraw = REDRAW_CURRENT;
> +     menu->redraw = REDRAW_CURRENT;
>       break;
>  
>        case OP_MAIN_NEXT_UNDELETED:
> Index: pager.c
> ===================================================================
> RCS file: /home/roessler/cvs/mutt/pager.c,v
> retrieving revision 3.14
> diff -u -r3.14 pager.c
> --- pager.c   12 Apr 2004 20:33:33 -0000      3.14
> +++ pager.c   16 May 2004 17:00:37 -0000
> @@ -2484,6 +2484,27 @@
>       MAYBE_REDRAW (redraw);
>       break;
>  
> +      case OP_EDIT_TYPE:
> +     if (extra->bdy)
> +     {
> +       r = mutt_edit_content_type (extra->hdr, extra->bdy, NULL);
> +       if (r != -1)
> +       {
> +         ch = -1;
> +         rc = OP_VIEW_ATTACH;
> +       }
> +     }
> +     else
> +     {
> +       r = mutt_edit_content_type (extra->hdr, extra->hdr->content, NULL);
> +       if (r != -1)
> +       {
> +         ch = -1;
> +         rc = OP_DISPLAY_MESSAGE; 
> +       }
> +     }
> +     break;
> +
>        case OP_SHELL_ESCAPE:
>       mutt_shell_escape ();
>       MAYBE_REDRAW (redraw);
> Index: protos.h
> ===================================================================
> RCS file: /home/roessler/cvs/mutt/protos.h,v
> retrieving revision 3.19
> diff -u -r3.19 protos.h
> --- protos.h  1 Feb 2004 17:10:43 -0000       3.19
> +++ protos.h  16 May 2004 17:00:41 -0000
> @@ -159,7 +159,7 @@
>  void mutt_default_save (char *, size_t, HEADER *);
>  void mutt_display_address (ENVELOPE *);
>  void mutt_display_sanitize (char *);
> -void mutt_edit_content_type (HEADER *, BODY *, FILE *);
> +int  mutt_edit_content_type (HEADER *, BODY *, FILE *);
>  void mutt_edit_file (const char *, const char *);
>  void mutt_edit_headers (const char *, const char *, HEADER *, char *, 
> size_t);
>  void mutt_curses_error (const char *, ...);
> Index: recvattach.c
> ===================================================================
> RCS file: /home/roessler/cvs/mutt/recvattach.c,v
> retrieving revision 3.13
> diff -u -r3.13 recvattach.c
> --- recvattach.c      12 Apr 2004 20:33:33 -0000      3.13
> +++ recvattach.c      16 May 2004 17:00:46 -0000
> @@ -803,17 +803,6 @@
>       else
>         op = OP_NULL;
>       break;
> -      case OP_EDIT_TYPE:
> -     /* when we edit the content-type, we should redisplay the attachment
> -        immediately */
> -     mutt_edit_content_type (hdr, idx[menu->current]->content, fp);
> -        if (idxmax)
> -        {
> -       mutt_update_attach_index (cur, idxp, idxlen, idxmax, menu);
> -       idx = *idxp;
> -     }
> -        op = OP_VIEW_ATTACH;
> -     break;
>        /* functions which are passed through from the pager */
>        case OP_CHECK_TRADITIONAL:
>          if (!(WithCrypto & APPLICATION_PGP) || (hdr && hdr->security & 
> PGP_TRADITIONAL_CHECKED))


-- 
Thomas Roessler · Personal soap box at <http://log.does-not-exist.org/>.