]> git.llucax.com Git - software/mutt-debian.git/blob - debian/patches/features/ifdef
Merge commit 'upstream/1.5.21'
[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 --- a/init.c
30 +++ b/init.c
31 @@ -635,6 +635,65 @@ static int remove_from_rx_list (RX_LIST
32    return (rv);
33  }
34  
35 +static int parse_ifdef (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err)
36 +{
37 +  int i, j, res = 0;
38 +  BUFFER token;
39 +
40 +  memset (&token, 0, sizeof (token));
41 +  mutt_extract_token (tmp, s, 0);
42 +
43 +  /* is the item defined as a variable? */
44 +  res = (mutt_option_index (tmp->data) != -1);
45 +
46 +  /* a function? */
47 +  if (!res)
48 +    for (i = 0; !res && i < MENU_MAX; i++)
49 +    {
50 +      struct binding_t *b = km_get_table (Menus[i].value);
51 +
52 +      if (!b)
53 +       continue;
54 +
55 +      for (j = 0; b[j].name; j++)
56 +       if (!mutt_strcmp (tmp->data, b[j].name))
57 +       {
58 +         res = 1;
59 +         break;
60 +       }
61 +    }
62 +
63 +  /* a command? */
64 +  if (!res)
65 +    for (i = 0; Commands[i].name; i++)
66 +    {
67 +      if (!mutt_strcmp (tmp->data, Commands[i].name))
68 +      {
69 +       res = 1;
70 +       break;
71 +      }
72 +    }
73 +
74 +  if (!MoreArgs (s))
75 +  {
76 +    snprintf (err->data, err->dsize, _("ifdef: too few arguments"));
77 +    return (-1);
78 +  }
79 +  mutt_extract_token (tmp, s, M_TOKEN_SPACE);
80 +
81 +  if (res)
82 +  {
83 +    if (mutt_parse_rc_line (tmp->data, &token, err) == -1)
84 +    {
85 +      mutt_error ("Erreur: %s", err->data);
86 +      FREE (&token.data);
87 +      return (-1);
88 +    }
89 +    FREE (&token.data);
90 +  }
91 +  return 0;
92 +}
93 +
94  static int parse_unignore (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
95  {
96    do
97 --- a/init.h
98 +++ b/init.h
99 @@ -3413,6 +3413,7 @@ static int parse_lists (BUFFER *, BUFFER
100  static int parse_unlists (BUFFER *, BUFFER *, unsigned long, BUFFER *);
101  static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
102  static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
103 +static int parse_ifdef (BUFFER *, BUFFER *, unsigned long, BUFFER *);
104  static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
105  static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
106  static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *);
107 @@ -3463,6 +3464,7 @@ struct command_t Commands[] = {
108    { "group",           parse_group,            0 },
109    { "ungroup",         parse_ungroup,          0 },
110    { "hdr_order",       parse_list,             UL &HeaderOrderList },
111 +  { "ifdef",           parse_ifdef,            0 },
112  #ifdef HAVE_ICONV
113    { "iconv-hook",      mutt_parse_hook,        M_ICONVHOOK },
114  #endif
115 --- a/doc/manual.xml.head
116 +++ b/doc/manual.xml.head
117 @@ -4087,6 +4087,28 @@ considered to be an executable program f
118  
119  </sect1>
120  
121 +<sect1 id="ifdef">
122 +
123 +<title>Configuring features conditionally</title>
124 +
125 +<para>
126 +Usage: <literal>ifdef</literal> <emphasis>item</emphasis> <emphasis>command</emphasis>
127 +</para>
128 +
129 +<para>
130 +This command allows to test if a feature has been compiled in, before
131 +actually executing the command. Item can be either the name of a
132 +function, variable, or command. Example:
133 +</para>
134 +
135 +<para>
136 +<screen>
137 +ifdef imap_keepalive 'source ~/.mutt/imap_setup'
138 +</screen>
139 +</para>
140 +
141 +</sect1>
142 +
143  <sect1 id="unhook">
144  <title>Removing Hooks</title>
145