]> git.llucax.com Git - software/mutt-debian.git/blob - debian/patches/not-applied/w3mface
refreshed all patches up to mutt.org
[software/mutt-debian.git] / debian / patches / not-applied / w3mface
1 # vim:ft=diff:
2 This is the xface (w3mface) patch by TAKAHASHI Tamotsu
3 <ttakah@lapis.plala.or.jp>.
4
5 Needs w3m-img, compface, and netpbm installed.
6
7 * Homepage: http://www.df7cb.de/projects/mutt/x-face/
8
9 * Changes made:
10   - Remove LIBEXECDIR definition to avoid needing rerunning automake,
11     hardcode /usr/lib/w3m/w3mimgdisplay.
12
13 == END PATCH
14 Index: xface/globals.h
15 ===================================================================
16 --- xface.orig/globals.h        2007-02-15 20:28:46.961763520 +0100
17 +++ xface/globals.h     2007-02-15 20:28:56.069378952 +0100
18 @@ -146,6 +146,11 @@ WHERE const char *ReleaseDate;
19  
20  WHERE HASH *Groups;
21  
22 +WHERE char *UncompFace;
23 +WHERE char *IconToPbm;
24 +WHERE char *W3mImgDisplay;
25 +WHERE char *W3mOpt;
26 +
27  WHERE LIST *AutoViewList INITVAL(0);
28  WHERE LIST *AlternativeOrderList INITVAL(0);
29  WHERE LIST *AttachAllow INITVAL(0);
30 Index: xface/hcache.c
31 ===================================================================
32 --- xface.orig/hcache.c 2007-02-15 20:28:46.968762456 +0100
33 +++ xface/hcache.c      2007-02-15 20:28:56.069378952 +0100
34 @@ -401,6 +401,7 @@ dump_envelope(ENVELOPE * e, unsigned cha
35    d = dump_char(e->message_id, d, off);
36    d = dump_char(e->supersedes, d, off);
37    d = dump_char(e->date, d, off);
38 +  d = dump_char(e->x_face, d, off);
39    d = dump_char(e->x_label, d, off);
40  
41    d = dump_buffer(e->spam, d, off);
42 @@ -438,6 +439,7 @@ restore_envelope(ENVELOPE * e, const uns
43    restore_char(&e->message_id, d, off);
44    restore_char(&e->supersedes, d, off);
45    restore_char(&e->date, d, off);
46 +  restore_char(&e->x_face, d, off);
47    restore_char(&e->x_label, d, off);
48  
49    restore_buffer(&e->spam, d, off);
50 Index: xface/init.h
51 ===================================================================
52 --- xface.orig/init.h   2007-02-15 20:28:46.976761240 +0100
53 +++ xface/init.h        2007-02-15 20:29:15.382442920 +0100
54 @@ -2941,6 +2941,31 @@ struct option_t MuttVars[] = {
55    ** Controls whether mutt writes out the Bcc header when preparing
56    ** messages to be sent.  Exim users may wish to unset this.
57    */
58 +  { "xface",           DT_BOOL, R_NONE, OPTXFACE, 0 },
59 +  /*
60 +  ** .pp
61 +  ** Controls whether mutt displays X-Faces.
62 +  */
63 +  { "xface_icontopbm", DT_PATH, R_NONE, UL &IconToPbm, UL "icontopbm" },
64 +  /*
65 +  ** .pp
66 +  ** Specify the path to ``icontopbm'' program.
67 +  */
68 +  { "xface_uncompface",        DT_PATH, R_NONE, UL &UncompFace, UL "uncompface" },
69 +  /*
70 +  ** .pp
71 +  ** Specify the path to ``uncompface'' program.
72 +  */
73 +  { "xface_w3mimgdisplay",DT_PATH, R_NONE, UL &W3mImgDisplay, UL "/usr/lib/w3m/w3mimgdisplay" },
74 +  /*
75 +  ** .pp
76 +  ** Specify the path to ``w3mimgdisplay'' program.
77 +  */
78 +  { "xface_w3mimgdisplay_options",DT_STR, R_NONE, UL &W3mOpt, UL "-x 5 -y 5" },
79 +  /*
80 +  ** .pp
81 +  ** Specify options for ``w3mimgdisplay'' program.
82 +  */
83    /*--*/
84    { NULL }
85  };
86 Index: xface/mutt.h
87 ===================================================================
88 --- xface.orig/mutt.h   2007-02-15 20:28:46.983760176 +0100
89 +++ xface/mutt.h        2007-02-15 20:28:56.071378648 +0100
90 @@ -450,6 +450,7 @@ enum
91    OPTWRAP,
92    OPTWRAPSEARCH,
93    OPTWRITEBCC,         /* write out a bcc header? */
94 +  OPTXFACE,
95    OPTXMAILER,
96  
97    OPTCRYPTUSEGPGME,
98 @@ -587,6 +588,7 @@ typedef struct envelope
99    char *message_id;
100    char *supersedes;
101    char *date;
102 +  char *x_face;                        /* X-Face header content */
103    char *x_label;
104    BUFFER *spam;
105    LIST *references;            /* message references (in reverse order) */
106 Index: xface/muttlib.c
107 ===================================================================
108 --- xface.orig/muttlib.c        2007-02-15 20:28:46.991758960 +0100
109 +++ xface/muttlib.c     2007-02-15 20:28:56.072378496 +0100
110 @@ -670,6 +670,7 @@ void mutt_free_envelope (ENVELOPE **p)
111    FREE (&(*p)->message_id);
112    FREE (&(*p)->supersedes);
113    FREE (&(*p)->date);
114 +  FREE (&(*p)->x_face);
115    FREE (&(*p)->x_label);
116  
117    mutt_buffer_free (&(*p)->spam);
118 Index: xface/pager.c
119 ===================================================================
120 --- xface.orig/pager.c  2007-02-15 20:28:47.000757592 +0100
121 +++ xface/pager.c       2007-02-15 20:28:56.072378496 +0100
122 @@ -1479,6 +1479,89 @@ upNLines (int nlines, struct line_t *inf
123    return cur;
124  }
125  
126 +static int
127 +display_xface (HEADER *hdr)
128 +{
129 +  char facefile[_POSIX_PATH_MAX + 1];
130 +  char command[LONG_STRING];
131 +  char *facedata;
132 +  FILE *fpin = NULL, *fpout = NULL;
133 +  pid_t pid;
134 +
135 +  /* everything ready? */
136 +  if (!UncompFace      || !(*UncompFace) ||
137 +      !IconToPbm       || !(*IconToPbm) ||
138 +      !W3mImgDisplay   || !(*W3mImgDisplay) ||
139 +      !hdr || !hdr->env || !hdr->env->x_face)
140 +    return 0;
141 +
142 +  /* test w3mimgdisplay */
143 +  snprintf (command, sizeof (command), "%s -test >/dev/null", W3mImgDisplay);
144 +  if (mutt_system (command) == -1)
145 +    return 0;
146 +
147 +  /* prepare facedata */
148 +  facedata = hdr->env->x_face;
149 +
150 +  /* convert facedata to imagedata
151 +   * and store imagedata in facefile
152 +   */
153 +  mutt_mktemp (facefile);
154 +  if ((fpout = safe_fopen (facefile, "w")) == NULL)
155 +  {
156 +    mutt_error (_("Could not create temporary file!"));
157 +    return 0;
158 +  }
159 +  snprintf (command, sizeof (command),
160 +           "( echo '/* Width=48, Height=48 */'; %s ) | %s",
161 +           UncompFace, IconToPbm);
162 +  pid = mutt_create_filter_fd
163 +         (command, &fpin, NULL, NULL, -1, fileno (fpout), -1);
164 +  if (pid < 0)
165 +  {
166 +    mutt_perror (_("face filter"));
167 +    safe_fclose (&fpout);
168 +    mutt_unlink (facefile);
169 +    return 0;
170 +  }
171 +  /* pass facedata to converters */
172 +  fputs (facedata, fpin);
173 +  if (safe_fclose (&fpin) != 0 && errno != EPIPE)
174 +  {
175 +    if (fpout != NULL)
176 +    {
177 +      mutt_wait_filter (pid);
178 +      safe_fclose (&fpout);
179 +    }
180 +    mutt_unlink (facefile);
181 +    return 0;
182 +  }
183 +  if (fpout != NULL)
184 +    mutt_wait_filter (pid);
185 +  safe_fclose (&fpout);
186 +
187 +  /*
188 +   * w3mimgdisplay
189 +   */
190 +  snprintf (command, sizeof (command),
191 +           "%s %s", W3mImgDisplay, NONULL (W3mOpt));
192 +  pid = mutt_create_filter_fd
193 +         (command, &fpin, NULL, NULL, -1, -1, -1);
194 +  if (pid < 0)
195 +  {
196 +    mutt_perror ("w3mdisp");
197 +    mutt_unlink (facefile);
198 +    return 0;
199 +  }
200 +  /* pass facefile to w3mimgdisplay */
201 +  fprintf (fpin, "2;3;\n0;1;0;0;48;48;0;0;48;48;%s\n4;\n3;\n", facefile);
202 +  if (safe_fclose (&fpin) != 0 && errno != EPIPE)
203 +    mutt_perror ("w3mdisp");
204 +  mutt_wait_filter (pid);
205 +  mutt_unlink (facefile);
206 +  return 0;
207 +}
208 +
209  static struct mapping_t PagerHelp[] = {
210    { N_("Exit"),        OP_EXIT },
211    { N_("PrevPg"), OP_PREV_PAGE },
212 @@ -1514,6 +1597,7 @@ mutt_pager (const char *banner, const ch
213    int lines = 0, curline = 0, topline = 0, oldtopline = 0, err, first = 1;
214    int r = -1;
215    int redraw = REDRAW_FULL;
216 +  int xface = 0;
217    FILE *fp = NULL;
218    LOFF_T last_pos = 0, last_offset = 0;
219    int old_smart_wrap, old_markers;
220 @@ -1593,6 +1677,8 @@ mutt_pager (const char *banner, const ch
221      
222      if (redraw & REDRAW_FULL)
223      {
224 +      xface = 1; /* display xface later */
225 +
226        SETCOLOR (MT_COLOR_NORMAL);
227        /* clear() doesn't optimize screen redraws */
228        move (0, 0);
229 @@ -1794,6 +1880,11 @@ mutt_pager (const char *banner, const ch
230      } else move (statusoffset, COLS-1);
231      mutt_refresh ();
232  
233 +    /* X-Face */
234 +    if (option (OPTXFACE) && xface && IsHeader (extra))
235 +      display_xface (extra->hdr);
236 +    xface = 0;
237 +
238      if (IsHeader (extra) && OldHdr == extra->hdr && TopLine != topline
239          && lineInfo[curline].offset < sb.st_size-1)
240      {
241 Index: xface/parse.c
242 ===================================================================
243 --- xface.orig/parse.c  2007-02-15 20:28:47.007756528 +0100
244 +++ xface/parse.c       2007-02-15 20:28:56.073378344 +0100
245 @@ -43,6 +43,7 @@ char *mutt_read_rfc822_line (FILE *f, ch
246    char *buf = line;
247    char ch;
248    size_t offset = 0;
249 +  int xface = 0;
250  
251    FOREVER
252    {
253 @@ -53,6 +54,9 @@ char *mutt_read_rfc822_line (FILE *f, ch
254        return (line);
255      }
256  
257 +    if (ascii_strcasecmp (buf, "x-face:") == 0)
258 +      xface = 1;
259 +
260      buf += strlen (buf) - 1;
261      if (*buf == '\n')
262      {
263 @@ -71,9 +75,12 @@ char *mutt_read_rfc822_line (FILE *f, ch
264        /* eat tabs and spaces from the beginning of the continuation line */
265        while ((ch = fgetc (f)) == ' ' || ch == '\t')
266         ;
267 -      ungetc (ch, f);
268 -      *++buf = ' '; /* string is still terminated because we removed
269 -                      at least one whitespace char above */
270 +      if (!xface)
271 +      {
272 +       ungetc (ch, f);
273 +       *++buf = ' '; /* string is still terminated because we removed
274 +                        at least one whitespace char above */
275 +      }
276      }
277  
278      buf++;
279 @@ -1244,6 +1251,11 @@ int mutt_parse_rfc822_line (ENVELOPE *e,
280        e->x_label = safe_strdup(p);
281        matched = 1;
282      }
283 +    else if (ascii_strcasecmp (line+1, "-face") == 0)
284 +    {
285 +      e->x_face = safe_strdup (p);
286 +      matched = 1;
287 +    }
288      
289      default:
290      break;
291 Index: xface/sendlib.c
292 ===================================================================
293 --- xface.orig/sendlib.c        2007-02-15 20:28:47.017755008 +0100
294 +++ xface/sendlib.c     2007-02-15 20:28:56.074378192 +0100
295 @@ -1829,6 +1829,9 @@ int mutt_write_rfc822_header (FILE *fp, 
296      }
297    }
298  
299 +  if (env->x_face)
300 +    fprintf (fp, "X-Face: %s\n", env->x_face);
301 +
302    if (mode == 0 && !privacy && option (OPTXMAILER) && !has_agent)
303    {
304      /* Add a vanity header */
305 --- a/PATCHES
306 +++ b/PATCHES
307 @@ -0,0 +1 @@
308 +patch-1.5.13.tamo.w3mface.2