1 diff -urNp -x '*.orig' mutt-2.0.6.org/Makefile.am mutt-2.0.6/Makefile.am
2 --- mutt-2.0.6.org/Makefile.am 2021-03-06 20:06:37.000000000 +0100
3 +++ mutt-2.0.6/Makefile.am 2021-04-18 19:23:38.363346256 +0200
4 @@ -36,7 +36,7 @@ mutt_SOURCES = \
5 main.c mbox.c menu.c mh.c mx.c pager.c parse.c pattern.c \
6 postpone.c query.c recvattach.c recvcmd.c \
7 rfc822.c rfc1524.c rfc2047.c rfc2231.c rfc3676.c \
8 - score.c send.c sendlib.c signal.c sort.c \
9 + score.c send.c sendlib.c signal.c signature.c sort.c \
10 status.c system.c thread.c charset.c history.c lib.c \
11 mutt_lisp.c muttlib.c editmsg.c mbyte.c \
12 url.c ascii.c crypt-mod.c crypt-mod.h safe_asprintf.c \
13 diff -urNp -x '*.orig' mutt-2.0.6.org/OPS mutt-2.0.6/OPS
14 --- mutt-2.0.6.org/OPS 2021-03-06 20:06:37.000000000 +0100
15 +++ mutt-2.0.6/OPS 2021-04-18 19:23:38.363346256 +0200
16 @@ -36,6 +36,7 @@ OP_COMPOSE_EDIT_MIME "edit attachment us
17 OP_COMPOSE_EDIT_REPLY_TO "edit the Reply-To field"
18 OP_COMPOSE_EDIT_SUBJECT "edit the subject of this message"
19 OP_COMPOSE_EDIT_TO "edit the TO list"
20 +OP_COMPOSE_SIG "choose a signature"
21 OP_CREATE_MAILBOX "create a new mailbox (IMAP only)"
22 OP_EDIT_TYPE "edit attachment content type"
23 OP_COMPOSE_GET_ATTACHMENT "get a temporary copy of an attachment"
24 @@ -153,6 +154,7 @@ OP_MIDDLE_PAGE "move to the middle of th
25 OP_NEXT_ENTRY "move to the next entry"
26 OP_NEXT_LINE "scroll down one line"
27 OP_NEXT_PAGE "move to the next page"
28 +OP_NEXT_SIG "move to the next signature"
29 OP_PAGER_BOTTOM "jump to the bottom of the message"
30 OP_PAGER_HIDE_QUOTED "toggle display of quoted text"
31 OP_PAGER_SKIP_QUOTED "skip beyond quoted text"
32 @@ -161,11 +163,13 @@ OP_PIPE "pipe message/attachment to a sh
33 OP_PREV_ENTRY "move to the previous entry"
34 OP_PREV_LINE "scroll up one line"
35 OP_PREV_PAGE "move to the previous page"
36 +OP_PREV_SIG "move to the previous signature"
37 OP_PRINT "print the current entry"
38 OP_PURGE_MESSAGE "delete the current entry, bypassing the trash folder"
39 OP_QUERY "query external program for addresses"
40 OP_QUERY_APPEND "append new query results to current results"
41 OP_QUIT "save changes to mailbox and quit"
42 +OP_RANDOM_SIG "pick a signature at random"
43 OP_RECALL_MESSAGE "recall a postponed message"
44 OP_REDRAW "clear and redraw the screen"
45 OP_REFORMAT_WINCH "{internal}"
46 @@ -179,6 +183,7 @@ OP_SEARCH_NEXT "search for next match"
47 OP_SEARCH_OPPOSITE "search for next match in opposite direction"
48 OP_SEARCH_TOGGLE "toggle search pattern coloring"
49 OP_SHELL_ESCAPE "invoke a command in a subshell"
50 +OP_SIG_SEARCH "search signatures matching a pattern"
51 OP_SORT "sort messages"
52 OP_SORT_REVERSE "sort messages in reverse order"
53 OP_TAG "tag the current entry"
54 diff -urNp -x '*.orig' mutt-2.0.6.org/PATCHES mutt-2.0.6/PATCHES
55 --- mutt-2.0.6.org/PATCHES 2021-04-18 19:23:38.230011162 +0200
56 +++ mutt-2.0.6/PATCHES 2021-04-18 19:23:38.366679633 +0200
59 +patch-1.3.27.cd.signatures_menu.2.1
60 diff -urNp -x '*.orig' mutt-2.0.6.org/compose.c mutt-2.0.6/compose.c
61 --- mutt-2.0.6.org/compose.c 2020-12-01 04:05:21.000000000 +0100
62 +++ mutt-2.0.6/compose.c 2021-04-18 19:23:38.363346256 +0200
63 @@ -1747,6 +1747,11 @@ int mutt_compose_menu (SEND_CONTEXT *sct
64 /* no send2hook, since this doesn't modify the message */
67 + case OP_COMPOSE_SIG:
68 + mutt_signature(msg->content->filename);
69 + mutt_update_encoding (msg->content);
75 diff -urNp -x '*.orig' mutt-2.0.6.org/doc/manual.xml.head mutt-2.0.6/doc/manual.xml.head
76 --- mutt-2.0.6.org/doc/manual.xml.head 2021-03-06 20:06:37.000000000 +0100
77 +++ mutt-2.0.6/doc/manual.xml.head 2021-04-18 19:23:38.363346256 +0200
78 @@ -525,6 +525,7 @@ linkend="tab-keys-nav-page"/> for page-b
82 +ESC s signature-menu select a signature and append it to your mail
86 diff -urNp -x '*.orig' mutt-2.0.6.org/functions.h mutt-2.0.6/functions.h
87 --- mutt-2.0.6.org/functions.h 2021-03-06 20:06:37.000000000 +0100
88 +++ mutt-2.0.6/functions.h 2021-04-18 19:23:38.363346256 +0200
89 @@ -308,6 +308,7 @@ const struct binding_t OpPager[] = { /*
91 { "what-key", OP_WHAT_KEY, NULL },
92 { "check-stats", OP_CHECK_STATS, NULL },
93 + { "signature-menu", OP_COMPOSE_SIG, "\033s" },
96 { "sidebar-first", OP_SIDEBAR_FIRST, NULL },
97 @@ -458,6 +459,19 @@ const struct binding_t OpQuery[] = { /*
101 +/* Signature Menu */
102 +struct binding_t OpSig[] = {
103 + { "next-sig", OP_NEXT_SIG, "j" },
104 + { "previous-sig", OP_PREV_SIG, "k" },
105 + { "random-sig", OP_RANDOM_SIG, "r" },
109 +struct binding_t OpSigDir[] = {
110 + { "search-sig", OP_SIG_SEARCH, "/" },
114 const struct binding_t OpEditor[] = { /* map: editor */
115 { "bol", OP_EDITOR_BOL, "\001" },
116 { "backward-char", OP_EDITOR_BACKWARD_CHAR, "\002" },
117 diff -urNp -x '*.orig' mutt-2.0.6.org/globals.h mutt-2.0.6/globals.h
118 --- mutt-2.0.6.org/globals.h 2021-04-18 19:23:38.230011162 +0200
119 +++ mutt-2.0.6/globals.h 2021-04-18 19:23:38.363346256 +0200
120 @@ -145,6 +145,7 @@ WHERE char *SidebarFormat;
121 WHERE char *SidebarIndentString;
123 WHERE char *Signature;
124 +WHERE char *SigDirectory;
125 WHERE char *SimpleSearch;
127 WHERE char *SmtpAuthenticators;
128 diff -urNp -x '*.orig' mutt-2.0.6.org/init.h mutt-2.0.6/init.h
129 --- mutt-2.0.6.org/init.h 2021-04-18 19:23:38.230011162 +0200
130 +++ mutt-2.0.6/init.h 2021-04-18 19:23:38.363346256 +0200
131 @@ -1953,6 +1953,14 @@ struct option_t MuttVars[] = {
132 ** automatically generated with \fI<mark-message>a\fP will be composed
133 ** from this prefix and the letter \fIa\fP.
135 + { "signatures_directory", DT_PATH, R_NONE, {.p=&SigDirectory}, {.p=""} },
138 + ** Specifies the path where your signatures are located. In the files of
139 + ** this directory, the signatures are separated by blank lines and/or
140 + ** sig_dashes (``-- '').
141 + ** You can choose between these signatures from the compose menu.
143 { "mark_old", DT_BOOL, R_BOTH, {.l=OPTMARKOLD}, {.l=1} },
146 diff -urNp -x '*.orig' mutt-2.0.6.org/keymap.c mutt-2.0.6/keymap.c
147 --- mutt-2.0.6.org/keymap.c 2021-03-06 20:06:37.000000000 +0100
148 +++ mutt-2.0.6/keymap.c 2021-04-18 19:23:38.366679633 +0200
149 @@ -49,6 +49,8 @@ const struct mapping_t Menus[] = {
150 { "pager", MENU_PAGER },
151 { "postpone", MENU_POST },
153 + { "signature", MENU_SIG },
154 + { "sig_directory", MENU_SIG_DIR },
155 { "smime", MENU_SMIME },
156 #ifdef CRYPT_BACKEND_GPGME
157 { "key_select_pgp", MENU_KEY_SELECT_PGP },
158 @@ -749,6 +751,8 @@ void km_init (void)
159 create_bindings (OpPost, MENU_POST);
160 create_bindings (OpQuery, MENU_QUERY);
161 create_bindings (OpAlias, MENU_ALIAS);
162 + create_bindings (OpSig, MENU_SIG);
163 + create_bindings (OpSigDir, MENU_SIG_DIR);
166 if ((WithCrypto & APPLICATION_PGP))
167 @@ -851,6 +855,9 @@ void km_init (void)
168 km_bindkey ("<enter>", MENU_ATTACH, OP_VIEW_ATTACH);
169 km_bindkey ("<enter>", MENU_COMPOSE, OP_VIEW_ATTACH);
171 + km_bindkey ("<up>", MENU_SIG, OP_PREV_SIG);
172 + km_bindkey ("<down>", MENU_SIG, OP_NEXT_SIG);
174 /* edit-to (default "t") hides generic tag-entry in Compose menu
175 This will bind tag-entry to "T" in the Compose menu */
176 km_bindkey ("T", MENU_COMPOSE, OP_TAG);
177 @@ -1015,6 +1022,10 @@ const struct binding_t *km_get_table (in
187 return (WithCrypto & APPLICATION_PGP)? OpPgp:NULL;
188 diff -urNp -x '*.orig' mutt-2.0.6.org/keymap.h mutt-2.0.6/keymap.h
189 --- mutt-2.0.6.org/keymap.h 2021-03-06 20:06:37.000000000 +0100
190 +++ mutt-2.0.6/keymap.h 2021-04-18 19:23:38.366679633 +0200
191 @@ -63,6 +63,8 @@ enum
200 @@ -105,6 +107,8 @@ const struct binding_t *km_get_table (in
201 extern const struct binding_t OpGeneric[];
202 extern const struct binding_t OpPost[];
203 extern const struct binding_t OpMain[];
204 +extern struct binding_t OpSig[];
205 +extern struct binding_t OpSigDir[];
206 extern const struct binding_t OpAttach[];
207 extern const struct binding_t OpPager[];
208 extern const struct binding_t OpCompose[];
209 diff -urNp -x '*.orig' mutt-2.0.6.org/menu.c mutt-2.0.6/menu.c
210 --- mutt-2.0.6.org/menu.c 2021-04-18 19:23:38.230011162 +0200
211 +++ mutt-2.0.6/menu.c 2021-04-18 19:23:38.366679633 +0200
212 @@ -683,7 +683,7 @@ void menu_current_bottom (MUTTMENU *menu
213 mutt_error _("No entries.");
216 -static void menu_next_entry (MUTTMENU *menu)
217 +void menu_next_entry (MUTTMENU *menu)
219 if (menu->current < menu->max - 1)
221 @@ -694,7 +694,7 @@ static void menu_next_entry (MUTTMENU *m
222 mutt_error _("You are on the last entry.");
225 -static void menu_prev_entry (MUTTMENU *menu)
226 +void menu_prev_entry (MUTTMENU *menu)
230 diff -urNp -x '*.orig' mutt-2.0.6.org/protos.h mutt-2.0.6/protos.h
231 --- mutt-2.0.6.org/protos.h 2021-03-06 20:06:37.000000000 +0100
232 +++ mutt-2.0.6/protos.h 2021-04-18 19:23:38.366679633 +0200
233 @@ -224,6 +224,7 @@ void mutt_free_body (BODY **);
234 void mutt_free_color (int fg, int bg);
235 void mutt_free_enter_state (ENTER_STATE **);
236 void mutt_free_envelope (ENVELOPE **);
237 +void mutt_signature (char *);
238 void mutt_free_header (HEADER **);
239 void mutt_free_parameter (PARAMETER **);
240 void mutt_free_regexp (REGEXP **);
241 diff -urNp -x '*.orig' mutt-2.0.6.org/signature.c mutt-2.0.6/signature.c
242 --- mutt-2.0.6.org/signature.c 1970-01-01 01:00:00.000000000 +0100
243 +++ mutt-2.0.6/signature.c 2021-04-18 19:23:38.366679633 +0200
246 + * Copyright (C) 2001 Cedric Duval <cedricduval@free.fr>
248 + * This program is free software; you can redistribute it and/or modify
249 + * it under the terms of the GNU General Public License as published by
250 + * the Free Software Foundation; either version 2 of the License, or
251 + * (at your option) any later version.
253 + * This program is distributed in the hope that it will be useful,
254 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
255 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
256 + * GNU General Public License for more details.
258 + * You should have received a copy of the GNU General Public License
259 + * along with this program; if not, write to the Free Software
260 + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
264 +# include "config.h"
268 +#include "mutt_menu.h"
269 +#include "mapping.h"
270 +#include "mutt_curses.h"
276 +#include <sys/stat.h>
278 +#define SIG_DISPLAY_LINES 4
279 +#define SEPARATOR(x) ((*x == '\n') || (mutt_strcmp (x, "-- \n") == 0))
280 +#define SIG_ADD_LINE(x,y) mutt_add_list (x, strtok (y, "\n"))
282 +typedef struct sig_list
284 + struct sig_list *next;
288 +typedef struct sig_dir
290 + struct sig_dir *next;
294 +typedef LIST * ENTRY;
296 +typedef struct entry_dir
302 +static struct mapping_t SigHelp[] = {
303 + { N_("Exit"), OP_EXIT },
304 + { N_("Search"), OP_SEARCH },
305 + { N_("Random"), OP_RANDOM_SIG },
306 + { N_("Help"), OP_HELP },
310 +static struct mapping_t SigDirHelp[] = {
311 + { N_("Exit"), OP_EXIT },
312 + { N_("Search signature"), OP_SIG_SEARCH },
313 + { N_("Help"), OP_HELP },
317 +void menu_next_entry (MUTTMENU *menu);
318 +void menu_prev_entry (MUTTMENU *menu);
321 +static int sig_match (LIST *s, regex_t *re)
325 + if (regexec (re, s->data, (size_t)0, NULL, (int)0) == 0)
332 +static void read_sig_file (char *name, SIG_LIST **begin, regex_t *re)
337 + SIG_LIST *first, *cur;
340 + if (!(fp = safe_fopen (name, "r")))
342 + mutt_error (_("Can't open signature file %s"), name);
346 + for (first = *begin; first && first->next; first = first->next, append++)
347 + ; /* append results to an existing list */
350 + while (fgets (buf, sizeof (buf), fp))
352 + if (buf[0] && !SEPARATOR (buf))
354 + sig = SIG_ADD_LINE (NULL, buf);
356 + while (fgets (buf, sizeof (buf), fp) && buf[0] && !SEPARATOR (buf))
357 + SIG_ADD_LINE (sig, buf);
359 + if (re && !sig_match (sig, re))
360 + mutt_free_list (&sig); /* previous sig didn't match the regexp */
363 + /* add signature */
365 + first = cur = (SIG_LIST *) safe_calloc (1, sizeof (SIG_LIST));
368 + cur->next = (SIG_LIST *) safe_calloc (1, sizeof (SIG_LIST));
384 +static void sig_make_entry (char *s, size_t slen, MUTTMENU *menu, int num)
386 + ENTRY *table = (ENTRY *) menu->data;
388 + snprintf (s, slen, "%3d %s",
393 +static int sig_menu_search (MUTTMENU *menu, regex_t *re, int num)
395 + return (sig_match (((ENTRY *)menu->data)[num], re) ? 0 : REG_NOMATCH);
398 +static void draw_sig_frame (LIST *s)
402 + for (i = 1; i <= SIG_DISPLAY_LINES; i++)
406 + mvaddstr (i, 0, s->data);
415 + SETCOLOR (MT_COLOR_STATUS);
416 + mvaddstr (SIG_DISPLAY_LINES + 1, 0, _("-- Signature"));
417 + SETCOLOR (MT_COLOR_STATUS);
423 +static void free_sig_list (SIG_LIST **sigs)
430 + *sigs = (*sigs)->next;
431 + mutt_free_list (&cur->sig);
432 + safe_free ((void **)&cur);
436 +static void append_signature (char *msg_file, LIST *s)
440 + if ((fp = safe_fopen (msg_file, "a")) == 0)
441 + mutt_perror (msg_file);
444 + if (option (OPTSIGDASHES))
445 + fputs ("\n-- \n", fp);
447 + for (; s; s = s->next)
448 + fprintf (fp, "%s\n", s->data);
450 + mutt_message (_("Signature appended to your mail"));
455 +static LIST *sig_list_menu (char *file, SIG_LIST *list)
457 + LIST *result = NULL;
461 + char helpstr[SHORT_STRING], title[SHORT_STRING];
464 + snprintf (title, sizeof (title), _("Signature : %s"), file);
466 + menu = mutt_new_menu (MENU_SIG);
467 + menu->make_entry = sig_make_entry;
469 + menu->search = sig_menu_search;
470 + menu->title = title;
471 + menu->help = mutt_compile_help (helpstr, sizeof (helpstr),
472 + MENU_SIG, SigHelp);
473 + menu->offset = SIG_DISPLAY_LINES + 2;
474 + menu->pagelen = LINES - SIG_DISPLAY_LINES - 4;
476 + for (sigl = list; sigl; sigl = sigl->next)
479 + menu->data = SigTable = (ENTRY *) safe_calloc (menu->max, sizeof (ENTRY));
481 + for (i = 0, sigl = list; sigl; i++, sigl = sigl->next)
482 + SigTable[i] = sigl->sig;
486 + switch (mutt_menuLoop (menu))
488 + case OP_GENERIC_SELECT_ENTRY:
489 + result = SigTable[menu->current];
494 + menu_prev_entry (menu);
495 + draw_sig_frame (SigTable[menu->current]);
499 + menu_next_entry (menu);
500 + draw_sig_frame (SigTable[menu->current]);
504 + menu->offset = SIG_DISPLAY_LINES + 2;
505 + menu->pagelen = LINES - SIG_DISPLAY_LINES - 4;
506 + draw_sig_frame (SigTable[menu->current]);
509 + case OP_RANDOM_SIG:
510 + menu->current = LRAND () % menu->max;
511 + draw_sig_frame (SigTable[menu->current]);
512 + menu->redraw |= REDRAW_MOTION;
521 + mutt_menuDestroy (&menu);
522 + safe_free ((void **)&SigTable);
526 +extern char* SearchBuffers[MENU_MAX];
528 +static SIG_LIST *sig_search_filter (MUTTMENU *menu, char *path)
532 + SIG_LIST *result = NULL;
534 + char* searchBuf = menu->menu >= 0 && menu->menu < MENU_MAX ?
535 + SearchBuffers[menu->menu] : NULL;
537 + snprintf (buf, sizeof(buf), searchBuf ? searchBuf : "");
538 + if (mutt_get_field (_("Search for: "), buf,
539 + sizeof (buf), MUTT_CLEAR) != 0 || !buf[0])
541 + if (menu->menu >= 0 && menu->menu < MENU_MAX)
543 + mutt_str_replace (&SearchBuffers[menu->menu], buf);
544 + searchBuf = SearchBuffers[menu->menu];
547 + if ((i = regcomp (&re, searchBuf, REG_NOSUB | REG_EXTENDED | REG_WORDS
548 + | mutt_which_case (searchBuf))) != 0)
550 + regerror (i, &re, buf, sizeof (buf));
552 + mutt_error ("%s", buf);
556 + /* building list of sigs matching the regexp */
557 + for (i = 0; i < menu->max; i++)
559 + /* search in every file if none is tagged */
560 + if (((ENTRY_DIR *) menu->data)[i].tagged || (menu->tagged == 0))
562 + snprintf (buf, sizeof (buf), "%s/%s", path,
563 + ((ENTRY_DIR *) menu->data)[i].data->name);
564 + read_sig_file (buf, &result, &re);
570 + mutt_error (_("Not found."));
575 +/* returns the list of files in this directory */
576 +static SIG_DIR *sig_directory (char *path)
581 + SIG_DIR *first = NULL, *cur = NULL;
582 + char file[_POSIX_PATH_MAX + SHORT_STRING];
584 + if ((dp = opendir (path)) == NULL)
586 + mutt_perror (path);
590 + while ((de = readdir (dp)))
592 + if ((de->d_name)[0] == '.') /* no hidden files */
595 + snprintf (file, sizeof (file), "%s/%s", path, de->d_name);
596 + if (lstat (file, &s) == -1)
599 + if ((!S_ISREG (s.st_mode)) && (!S_ISLNK (s.st_mode)))
603 + cur = first = safe_calloc (1, sizeof (SIG_DIR));
606 + cur->next = safe_calloc (1, sizeof (SIG_DIR));
609 + cur->name = safe_strdup (de->d_name);
616 +static void sig_dir_make_entry (char *s, size_t slen, MUTTMENU *menu, int num)
618 + ENTRY_DIR *table = (ENTRY_DIR *) menu->data;
620 + snprintf (s, slen, "%c %3d - %s",
621 + table[num].tagged ? '*' : ' ',
623 + table[num].data->name);
626 +static int sig_dir_tag (MUTTMENU *menu, int n, int m)
628 + ENTRY_DIR *cur = &((ENTRY_DIR *) menu->data)[n];
629 + int ot = cur->tagged;
631 + cur->tagged = m >= 0 ? m : !cur->tagged;
632 + return cur->tagged - ot;
636 +static int sig_dir_sort (const void *a, const void *b)
638 + ENTRY_DIR *pa = (ENTRY_DIR *) a;
639 + ENTRY_DIR *pb = (ENTRY_DIR *) b;
641 + return (mutt_strcmp (pa->data->name, pb->data->name));
644 +static int sig_dir_menu (char *path, char *msg_file)
648 + LIST *result = NULL;
649 + ENTRY_DIR *FileTable;
650 + SIG_DIR *list, *files;
651 + char buf[STRING], helpstr[SHORT_STRING], title[SHORT_STRING];
654 + if ((list = sig_directory (path)) == NULL)
657 + snprintf (title, sizeof (title), "Signature directory : %s", path);
659 + menu = mutt_new_menu (MENU_SIG_DIR);
660 + menu->make_entry = sig_dir_make_entry;
661 + menu->search = NULL; /* search within files with sig_search_filter() */
662 + menu->tag = sig_dir_tag;
663 + menu->title = title;
664 + menu->help = mutt_compile_help (helpstr, sizeof (helpstr),
665 + MENU_SIG_DIR, SigDirHelp);
667 + for (files = list; files; files = files->next)
670 + menu->data = FileTable = (ENTRY_DIR *) safe_calloc (menu->max,
671 + sizeof (ENTRY_DIR));
673 + for (i = 0, files = list; files; i++, files = files->next)
674 + FileTable[i].data = files;
676 + qsort (FileTable, menu->max, sizeof (ENTRY_DIR), sig_dir_sort);
680 + switch (mutt_menuLoop (menu))
682 + case OP_SIG_SEARCH:
683 + sigl = sig_search_filter (menu, path);
687 + if ((result = sig_list_menu (_("query results"), sigl)) != NULL)
689 + append_signature (msg_file, result);
693 + free_sig_list (&sigl);
697 + case OP_GENERIC_SELECT_ENTRY:
698 + snprintf (buf, sizeof (buf), "%s/%s", path,
699 + FileTable[menu->current].data->name);
701 + read_sig_file (buf, &sigl, NULL);
705 + if ((result = sig_list_menu (buf, sigl)) != NULL)
707 + append_signature (msg_file, result);
711 + free_sig_list (&sigl);
723 + safe_free ((void **)&list->name);
726 + safe_free ((void **)&files);
728 + safe_free ((void **)&FileTable);
729 + mutt_menuDestroy (&menu);
733 +void mutt_signature (char *msg_file)
737 + mutt_error (_("variable 'signatures_directory' is unset"));
741 + if (sig_dir_menu (SigDirectory, msg_file) == -1)
742 + mutt_error (_("%s: no files in this directory"), SigDirectory);