]> granicus.if.org Git - neomutt/commitdiff
eliminate MuttIndexWindow from create_filter() devel/index
authorRichard Russon <rich@flatcap.org>
Mon, 21 Oct 2019 16:39:09 +0000 (17:39 +0100)
committerRichard Russon <rich@flatcap.org>
Sun, 27 Oct 2019 03:08:13 +0000 (03:08 +0000)
`mutt_create_filter_fd()` uses the screen width to set the environment
variable $COLUMNS.  This allows certain filters / mailcap programs to
adjust their output.

$COLUMNS is set/reset in the smallest scope possible.

browser.c
commands.c
filter.c
mutt_attach.c
mutt_attach.h
recvattach.c

index 382710c000cf5763b9ac1926e167390575febba6..3e6ec3f7dd01a9d51c1714f594f78184fe820438 100644 (file)
--- a/browser.c
+++ b/browser.c
@@ -1979,7 +1979,7 @@ void mutt_buffer_select_file(struct Buffer *file, SelectFileFlags flags,
           struct Body *b = mutt_make_file_attach(buf2);
           if (b)
           {
-            mutt_view_attachment(NULL, b, MUTT_VA_REGULAR, NULL, NULL);
+            mutt_view_attachment(NULL, b, MUTT_VA_REGULAR, NULL, NULL, menu->indexwin);
             mutt_body_free(&b);
             menu->redraw = REDRAW_FULL;
           }
index bf2f9383e25841392b31dee371451e25197dbe10..aa4a836363a72c9b2efb40c3048ba1ac4626eec2 100644 (file)
@@ -206,6 +206,10 @@ int mutt_display_message(struct MuttWindow *win, struct Mailbox *m, struct Email
   mutt_parse_mime_message(m, e);
   mutt_message_hook(m, e, MUTT_MESSAGE_HOOK);
 
+  char columns[16];
+  snprintf(columns, sizeof(columns), "%d", win->cols);
+  mutt_envlist_set("COLUMNS", columns, true);
+
   /* see if crypto is needed for this message.  if so, we should exit curses */
   if ((WithCrypto != 0) && e->security)
   {
@@ -382,6 +386,7 @@ int mutt_display_message(struct MuttWindow *win, struct Mailbox *m, struct Email
   }
 
 cleanup:
+  mutt_envlist_unset("COLUMNS");
   mutt_buffer_pool_release(&tempfile);
   return rc;
 }
index 5c1806d866db73f771fb35ea32b2b8d89702fa29..845fc41d2eae2d372b5dd00182938a83242a0b8f 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -150,13 +150,6 @@ pid_t mutt_create_filter_fd(const char *cmd, FILE **fp_in, FILE **fp_out,
       close(fderr);
     }
 
-    if (MuttIndexWindow && (MuttIndexWindow->cols > 0))
-    {
-      char columns[16];
-      snprintf(columns, sizeof(columns), "%d", MuttIndexWindow->cols);
-      mutt_envlist_set("COLUMNS", columns, true);
-    }
-
     execle(EXEC_SHELL, "sh", "-c", cmd, NULL, mutt_envlist_getlist());
     _exit(127);
   }
index 09712dd542fab5fef933043cab0fb7be8f168558..5ae473bba001b68ed28bf801f50847ae93964142 100644 (file)
@@ -47,6 +47,7 @@
 #include "globals.h"
 #include "handler.h"
 #include "mailcap.h"
+#include "mutt_window.h"
 #include "muttlib.h"
 #include "mx.h"
 #include "ncrypt/ncrypt.h"
@@ -371,6 +372,7 @@ void mutt_check_lookup_list(struct Body *b, char *type, size_t len)
  * @param mode   How the attachment should be viewed, see #ViewAttachMode
  * @param e      Current Email. Can be NULL
  * @param actx   Attachment context
+ * @param win    Window
  * @retval 0   If the viewer is run and exited successfully
  * @retval -1  Error
  * @retval num Return value of mutt_do_pager() when it is used
@@ -382,7 +384,7 @@ void mutt_check_lookup_list(struct Body *b, char *type, size_t len)
  * exits.
  */
 int mutt_view_attachment(FILE *fp, struct Body *a, enum ViewAttachMode mode,
-                         struct Email *e, struct AttachCtx *actx)
+                         struct Email *e, struct AttachCtx *actx, struct MuttWindow *win)
 {
   bool use_mailcap = false;
   bool use_pipe = false;
@@ -409,6 +411,10 @@ int mutt_view_attachment(FILE *fp, struct Body *a, enum ViewAttachMode mode,
       (mode == MUTT_VA_MAILCAP || (mode == MUTT_VA_REGULAR && mutt_needs_mailcap(a)));
   snprintf(type, sizeof(type), "%s/%s", TYPE(a), a->subtype);
 
+  char columns[16];
+  snprintf(columns, sizeof(columns), "%d", win->cols);
+  mutt_envlist_set("COLUMNS", columns, true);
+
   if (use_mailcap)
   {
     entry = mailcap_entry_new();
@@ -509,6 +515,7 @@ int mutt_view_attachment(FILE *fp, struct Body *a, enum ViewAttachMode mode,
       pid = mutt_create_filter_fd(mutt_b2s(cmd), NULL, NULL, NULL,
                                   use_pipe ? fd_temp : -1,
                                   use_pager ? fd_pager : -1, -1);
+
       if (pid == -1)
       {
         if (fd_pager != -1)
@@ -656,6 +663,7 @@ return_error:
   mutt_buffer_pool_release(&tmpfile);
   mutt_buffer_pool_release(&pagerfile);
   mutt_buffer_pool_release(&cmd);
+  mutt_envlist_unset("COLUMNS");
 
   return rc;
 }
index bd3b7ac0841392cb8ff660b9b8ea61056303cec1..8b8decd07db4064a66450832686ca47a71b06db3 100644 (file)
 #include <stdio.h>
 
 struct AttachCtx;
-struct Menu;
-struct Email;
 struct Body;
+struct Email;
+struct Menu;
+struct MuttWindow;
 
 /**
  * enum ViewAttachMode - Options for mutt_view_attachment()
@@ -67,7 +68,7 @@ void mutt_pipe_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
 void mutt_print_attachment_list(struct AttachCtx *actx, FILE *fp, bool tag,
                                 struct Body *top);
 
-int mutt_view_attachment(FILE *fp, struct Body *a, enum ViewAttachMode mode, struct Email *e, struct AttachCtx *actx);
+int mutt_view_attachment(FILE *fp, struct Body *a, enum ViewAttachMode mode, struct Email *e, struct AttachCtx *actx, struct MuttWindow *win);
 
 void mutt_check_lookup_list(struct Body *b, char *type, size_t len);
 int mutt_compose_attachment(struct Body *a);
index cd5fb851e3ee96aad304eac7f61d6b010043536e..2e780528b8e888f98620a8c66efab1892070261c 100644 (file)
@@ -1152,7 +1152,7 @@ int mutt_attach_display_loop(struct Menu *menu, int op, struct Email *e,
 
       case OP_VIEW_ATTACH:
         op = mutt_view_attachment(CUR_ATTACH->fp, CUR_ATTACH->content,
-                                  MUTT_VA_REGULAR, e, actx);
+                                  MUTT_VA_REGULAR, e, actx, menu->indexwin);
         break;
 
       case OP_NEXT_ENTRY:
@@ -1442,12 +1442,14 @@ void mutt_view_attachments(struct Email *e)
     switch (op)
     {
       case OP_ATTACH_VIEW_MAILCAP:
-        mutt_view_attachment(CUR_ATTACH->fp, CUR_ATTACH->content, MUTT_VA_MAILCAP, e, actx);
+        mutt_view_attachment(CUR_ATTACH->fp, CUR_ATTACH->content,
+                             MUTT_VA_MAILCAP, e, actx, menu->indexwin);
         menu->redraw = REDRAW_FULL;
         break;
 
       case OP_ATTACH_VIEW_TEXT:
-        mutt_view_attachment(CUR_ATTACH->fp, CUR_ATTACH->content, MUTT_VA_AS_TEXT, e, actx);
+        mutt_view_attachment(CUR_ATTACH->fp, CUR_ATTACH->content,
+                             MUTT_VA_AS_TEXT, e, actx, menu->indexwin);
         menu->redraw = REDRAW_FULL;
         break;