]> git.llucax.com Git - software/mutt-debian.git/blob - debian/patches/features/ifdef
note fixing of #447340
[software/mutt-debian.git] / debian / patches / features / ifdef
1 # vim:ft=diff:
2 This is the ifdef patch by Cedric Duval <cedricduval@free.fr>.
3
4 This command allows to test if a feature has been compiled in before actually
5 attempting to configure / use it.
6
7 Syntax:
8
9 ifdef <item> <command>
10
11 where <item> can be the name of a variable, function, or command.
12
13 Examples:
14
15 ifdef  imap-fetch-mail  'source ~/.mutt/imap_setup'
16 ifdef  trash  set trash=~/Mail/trash
17
18 * Patch last synced with upstream:
19   - Date: 2007-02-15
20   - File:
21     http://cedricduval.free.fr/mutt/patches/download/patch-1.5.4.cd.ifdef.1
22
23 * Changes made:
24   - Updated to 1.5.13
25   - Also look for commands
26   - Use mutt_strcmp in favor of ascii_strncasecmp to compare strings.
27
28 == END PATCH
29 Index: mutt/init.c
30 ===================================================================
31 --- mutt.orig/init.c    2006-12-12 14:15:03.000000000 +0100
32 +++ mutt/init.c 2007-02-15 23:38:45.597907432 +0100
33 @@ -624,6 +624,65 @@ static int remove_from_rx_list (RX_LIST 
34    return (rv);
35  }
36  
37 +static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
38 +{
39 +  int i, j, res = 0;
40 +  BUFFER token;
41 +
42 +  memset (&token, 0, sizeof (token));
43 +  mutt_extract_token (tmp, s, 0);
44 +
45 +  /* is the item defined as a variable? */
46 +  res = (mutt_option_index (tmp->data) != -1);
47 +
48 +  /* a function? */
49 +  if (!res)
50 +    for (i = 0; !res && i < MENU_MAX; i++)
51 +    {
52 +      struct binding_t *b = km_get_table (Menus[i].value);
53 +
54 +      if (!b)
55 +       continue;
56 +
57 +      for (j = 0; b[j].name; j++)
58 +       if (!mutt_strcmp (tmp->data, b[j].name))
59 +       {
60 +         res = 1;
61 +         break;
62 +       }
63 +    }
64 +
65 +  /* a command? */
66 +  if (!res)
67 +    for (i = 0; Commands[i].name; i++)
68 +    {
69 +      if (!mutt_strcmp (tmp->data, Commands[i].name))
70 +      {
71 +       res = 1;
72 +       break;
73 +      }
74 +    }
75 +
76 +  if (!MoreArgs (s))
77 +  {
78 +    snprintf (err->data, err->dsize, _("ifdef: too few arguments"));
79 +    return (-1);
80 +  }
81 +  mutt_extract_token (tmp, s, M_TOKEN_SPACE);
82 +
83 +  if (res)
84 +  {
85 +    if (mutt_parse_rc_line (tmp->data, &token, err) == -1)
86 +    {
87 +      mutt_error ("Erreur: %s", err->data);
88 +      FREE (&token.data);
89 +      return (-1);
90 +    }
91 +    FREE (&token.data);
92 +  }
93 +  return 0;
94 +}
95 +
96  static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
97  {
98    do
99 Index: mutt/init.h
100 ===================================================================
101 --- mutt.orig/init.h    2006-12-12 14:15:03.000000000 +0100
102 +++ mutt/init.h 2007-02-15 23:26:21.160079184 +0100
103 @@ -3017,6 +3017,7 @@ static int parse_lists (BUFFER *, BUFFER
104  static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *);
105  static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
106  static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
107 +static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *);
108  static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
109  static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
110  static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *);
111 @@ -3068,6 +3069,7 @@ struct command_t Commands[] = {
112    { "group",           parse_group,            0 },
113    { "ungroup",         parse_ungroup,          0 },
114    { "hdr_order",       parse_list,             UL &HeaderOrderList },
115 +  { "ifdef",           parse_ifdef,            0 },
116  #ifdef HAVE_ICONV
117    { "iconv-hook",      mutt_parse_hook,        M_ICONVHOOK }, 
118  #endif
119 Index: mutt/doc/manual.xml.head
120 ===================================================================
121 --- mutt.orig/doc/manual.xml.head       2007-02-15 21:53:09.312169280 +0100
122 +++ mutt/doc/manual.xml.head    2007-02-15 23:42:23.875724160 +0100
123 @@ -3091,6 +3091,28 @@ considered to be an executable program f
124  
125  </sect1>
126  
127 +<sect1 id="ifdef">
128 +
129 +<title>Configuring features conditionnaly</title>
130 +
131 +<para>
132 +Usage: <literal>ifdef</literal> <emphasis>item</emphasis> <emphasis>command</emphasis>
133 +</para>
134 +
135 +<para>
136 +This command allows to test if a feature has been compiled in, before
137 +actually executing the command. Item can be either the name of a
138 +function, variable, or command. Example:
139 +</para>
140 +
141 +<para>
142 +<screen>
143 +ifdef imap_keepalive 'source ~/.mutt/imap_setup'
144 +</screen>
145 +</para>
146 +
147 +</sect1>
148 +
149  <sect1 id="unhook">
150  <title>Removing hooks</title>
151  
152 --- a/PATCHES
153 +++ b/PATCHES
154 @@ -0,0 +1 @@
155 +patch-1.5.13.cd.ifdef.2