1 /*@ S-nail - a mail user agent derived from Berkeley Mail.
2 *@ This header is included by ./lex.c and defines the command array content.
4 * Copyright (c) 2000-2004 Gunnar Ritter, Freiburg i. Br., Germany.
5 * Copyright (c) 2012 - 2014 Steffen (Daode) Nurpmeso <sdaoden@users.sf.net>.
8 * Copyright (c) 1980, 1993
9 * The Regents of the University of California. All rights reserved.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. All advertising materials mentioning features or use of this software
20 * must display the following acknowledgement:
21 * This product includes software developed by the University of
22 * California, Berkeley and its contributors.
23 * 4. Neither the name of the University nor the names of its contributors
24 * may be used to endorse or promote products derived from this software
25 * without specific prior written permission.
27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40 /* Some shorter aliases to be able to define a command in two lines */
41 #define MSGLIST ARG_MSGLIST
42 #define STRLIST ARG_STRLIST
43 #define RAWLIST ARG_RAWLIST
44 #define NOLIST ARG_NOLIST
45 #define NDMLIST ARG_NDMLIST
46 #define ECHOLIST ARG_ECHOLIST
47 #define ARG_ARGMASK ARG_ARGMASK
59 #ifdef HAVE_DOCSTRINGS
60 # define DS(ID,S) , ID, S
65 /* Note: the first command in here may NOT expand to an unsupported one! */
66 { "next", &c_next
, (A
| NDMLIST
), 0, MMNDEL
67 DS(355, "Goes to the next message (-list) and prints it") },
68 { "alias", &c_group
, (M
| RAWLIST
), 0, 1000
69 DS(304, "Show all or the specified alias(es), or (re)define one") },
70 { "print", &c_type
, (A
| MSGLIST
), 0, MMNDEL
71 DS(361, "Type each message of <message-list> on the terminal") },
72 { "type", &c_type
, (A
| MSGLIST
), 0, MMNDEL
73 DS(361, "Type each message of <message-list> on the terminal") },
74 { "Type", &c_Type
, (A
| MSGLIST
), 0, MMNDEL
75 DS(360, "Like \"print\", but prints all headers and parts") },
76 { "Print", &c_Type
, (A
| MSGLIST
), 0, MMNDEL
77 DS(360, "Like \"print\", but prints all headers and parts") },
78 { "visual", &c_visual
, (A
| I
| MSGLIST
), 0, MMNORM
79 DS(326, "Edit <message-list>") },
80 { "top", &c_top
, (A
| MSGLIST
), 0, MMNDEL
81 DS(385, "Print top few lines of <message-list>") },
82 { "touch", &c_stouch
, (A
| W
| MSGLIST
), 0, MMNDEL
83 DS(386, "Mark <message-list> for saving in *mbox*") },
84 { "preserve", &c_preserve
, (A
| W
| MSGLIST
), 0, MMNDEL
85 DS(344, "Save <message-list> in system mailbox instead of *mbox*") },
86 { "delete", &c_delete
, (A
| W
| P
| MSGLIST
), 0, MMNDEL
87 DS(320, "Delete <message-list>") },
88 { "dp", &c_deltype
, (A
| W
| MSGLIST
), 0, MMNDEL
89 DS(323, "Delete the current message, then print the next") },
90 { "dt", &c_deltype
, (A
| W
| MSGLIST
), 0, MMNDEL
91 DS(323, "Delete the current message, then print the next") },
92 { "undelete", &c_undelete
, (A
| P
| MSGLIST
), MDELETED
,MMNDEL
93 DS(392, "Un\"delete\" <message-list>") },
94 { "unset", &c_unset
, (M
| RAWLIST
), 1, 1000
95 DS(402, "Unset <option-list>") },
96 { "mail", &c_sendmail
, (R
| M
| I
| STRLIST
), 0, 0
97 DS(351, "Compose mail; recipients may be given as arguments") },
98 { "Mail", &c_Sendmail
, (R
| M
| I
| STRLIST
), 0, 0
99 DS(350, "Like \"mail\", but derive filename from first recipient") },
100 { "mbox", &c_mboxit
, (A
| W
| MSGLIST
), 0, 0
101 DS(352, "Indicate that <message-list> is to be stored in *mbox*") },
102 { "more", &c_more
, (A
| MSGLIST
), 0, MMNDEL
103 DS(410, "Like \"type\"/\"print\", put print \\f between messages") },
104 { "page", &c_more
, (A
| MSGLIST
), 0, MMNDEL
105 DS(410, "Like \"type\"/\"print\", put print \\f between messages") },
106 { "More", &c_More
, (A
| MSGLIST
), 0, MMNDEL
107 DS(411, "Like \"Type\"/\"Print\", put print \\f between messages") },
108 { "Page", &c_More
, (A
| MSGLIST
), 0, MMNDEL
109 DS(411, "Like \"Type\"/\"Print\", put print \\f between messages") },
110 { "unread", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
111 DS(356, "Mark <message-list> as not being read") },
112 { "Unread", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
113 DS(356, "Mark <message-list> as not being read") },
114 { "new", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
115 DS(356, "Mark <message-list> as not being read") },
116 { "New", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
117 DS(356, "Mark <message-list> as not being read") },
118 { "!", &c_shell
, (I
| STRLIST
), 0, 0
119 DS(412, "Execute <shell-command>") },
120 { "copy", &c_copy
, (A
| M
| STRLIST
), 0, 0
121 DS(314, "Copy <message-list>, but don't mark them for deletion") },
122 { "Copy", &c_Copy
, (A
| M
| STRLIST
), 0, 0
123 DS(315, "Like \"copy\", but derive filename from first sender") },
124 { "chdir", &c_chdir
, (M
| RAWLIST
), 0, 1
125 DS(309, "Change CWD to the specified/the login directory") },
126 { "cd", &c_chdir
, (M
| RAWLIST
), 0, 1
127 DS(309, "Change CWD to the specified/the login directory") },
128 { "save", &c_save
, (A
| STRLIST
), 0, 0
129 DS(371, "Append <message-list> to <file>") },
130 { "Save", &c_Save
, (A
| STRLIST
), 0, 0
131 DS(372, "Like \"save\", but derive filename from first sender") },
132 { "source", &c_source
, (M
| RAWLIST
), 1, 1
133 DS(383, "Read commands from <file>") },
134 { "set", &c_set
, (M
| RAWLIST
), 0, 1000
135 DS(376, "Print all variables, or set variables to argument(s)") },
136 { "shell", &c_dosh
, (I
| NOLIST
), 0, 0
137 DS(378, "Invoke an interactive shell") },
138 { "unalias", &c_ungroup
, (M
| RAWLIST
), 0, 1000
139 DS(387, "Un\"alias\" <name-list>") },
140 { "write", &c_write
, (A
| STRLIST
), 0, 0
141 DS(406, "Write (append) to <file>") },
142 { "from", &c_from
, (A
| MSGLIST
), 0, MMNORM
143 DS(338, "Show message headers of <message-list>") },
144 { "file", &c_file
, (T
| M
| RAWLIST
), 0, 1
145 DS(329, "Switch to new or show the current mail file or folder") },
146 { "followup", &c_followup
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
147 DS(333, "Like \"respond\", but derive filename from first sender") },
148 { "followupall", &c_followupall
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
149 DS(334, "Like \"respond\", but derive filename from first sender") },
150 { "followupsender", &c_followupsender
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
151 DS(335, "Like \"Followup\", but always respond to the sender only") },
152 { "folder", &c_file
, (T
| M
| RAWLIST
), 0, 1
153 DS(329, "Switch to new or show the current mail file or folder") },
154 { "folders", &c_folders
, (T
| M
| RAWLIST
), 0, 1
155 DS(332, "List folders (below given folder)") },
156 { "z", &c_scroll
, (A
| M
| STRLIST
), 0, 0
157 DS(407, "Scroll to next/previous window of headers") },
158 { "Z", &c_Scroll
, (A
| M
| STRLIST
), 0, 0
159 DS(408, "Like \"z\", but continues to the next flagged message") },
160 { "headers", &c_headers
, (A
| MSGLIST
), 0, MMNDEL
161 DS(342, "Show the current(/last/next) 18-message group of headers") },
162 { "help", &c_help
, (/*H |*/ M
| RAWLIST
), 0, 1
163 DS(343, "Show command help (for the given one)") },
164 { "?", &c_help
, (H
| M
| RAWLIST
), 0, 1
165 DS(343, "Show command help (for the given one)") },
166 { "=", &c_pdot
, (A
| NOLIST
), 0, 0
167 DS(409, "Show current message number") },
168 { "Reply", &c_Respond
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
169 DS(368, "Reply to originator, exclusively") },
170 { "Respond", &c_Respond
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
171 DS(368, "Reply to originator, exclusively") },
172 { "Followup", &c_Followup
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
173 DS(332, "Like \"Respond\", but derive filename from first sender") },
174 { "reply", &c_respond
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
175 DS(369, "Reply to originator and recipients of <message-list>") },
176 { "replyall", &c_respondall
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
177 DS(369, "Reply to originator and recipients of <message-list>") },
178 { "replysender", &c_respondsender
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
179 DS(368, "Reply to originator, exclusively") },
180 { "respond", &c_respond
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
181 DS(369, "Reply to originators and recipients of <message-list>") },
182 { "respondall", &c_respondall
, (A
| R
| I
| MSGLIST
), 0, MMNDEL
183 DS(369, "Reply to originators and recipients of <message-list>") },
184 { "respondsender", &c_respondsender
, (A
| R
| I
| MSGLIST
),0, MMNDEL
185 DS(368, "Reply to originator, exclusively") },
186 { "Resend", &c_Resend
, (A
| R
| STRLIST
), 0, MMNDEL
187 DS(365, "Like \"resend\", but don't add Resent-* headers") },
188 { "Redirect", &c_Resend
, (A
| R
| STRLIST
), 0, MMNDEL
189 DS(365, "Like \"resend\", but don't add Resent-* headers") },
190 { "resend", &c_resend
, (A
| R
| STRLIST
), 0, MMNDEL
191 DS(364, "Resend <message-list> to <user>, add Resent-* headers") },
192 { "redirect", &c_resend
, (A
| R
| STRLIST
), 0, MMNDEL
193 DS(364, "Resend <message-list> to <user>, add Resent-* headers") },
194 { "Forward", &c_Forward
, (A
| R
| STRLIST
), 0, MMNDEL
195 DS(337, "Like \"forward\", but derive filename from <address>") },
196 { "Fwd", &c_Forward
, (A
| R
| STRLIST
), 0, MMNDEL
197 DS(337, "Like \"forward\", but derive filename from <address>") },
198 { "forward", &c_forward
, (A
| R
| STRLIST
), 0, MMNDEL
199 DS(336, "Forward <message> to <address>") },
200 { "fwd", &c_forward
, (A
| R
| STRLIST
), 0, MMNDEL
201 DS(336, "Forward <message> to <address>") },
202 { "edit", &c_editor
, (A
| I
| MSGLIST
), 0, MMNORM
203 DS(326, "Edit <message-list>") },
204 { "echo", &c_echo
, (M
| ECHOLIST
), 0, 1000
205 DS(325, "Echo given arguments") },
206 { "quit", &c_quit
, NOLIST
, 0, 0
207 DS(363, "Terminate session, saving messages as necessary") },
208 { "list", &_pcmdlist
, (M
| NOLIST
), 0, 0
209 DS(349, "List all available commands") },
210 { "xit", &c_rexit
, (M
| NOLIST
), 0, 0
211 DS(328, "Immediate return to the shell without saving") },
212 { "exit", &c_rexit
, (M
| NOLIST
), 0, 0
213 DS(328, "Immediate return to the shell without saving") },
214 { "pipe", &c_pipe
, (A
| STRLIST
), 0, MMNDEL
215 DS(359, "Pipe <message-list> to <command>") },
216 { "|", &c_pipe
, (A
| STRLIST
), 0, MMNDEL
217 DS(359, "Pipe <message-list> to <command>") },
218 { "Pipe", &c_Pipe
, (A
| STRLIST
), 0, MMNDEL
219 DS(358, "Like \"pipe\", but pipes all headers and parts") },
220 { "size", &c_messize
, (A
| MSGLIST
), 0, MMNDEL
221 DS(381, "Show size in characters for <message-list>") },
222 { "hold", &c_preserve
, (A
| W
| MSGLIST
), 0, MMNDEL
223 DS(344, "Save <message-list> in system mailbox instead of *mbox*") },
224 { "if", &c_if
, (F
| M
| RAWLIST
), 1, 3
225 DS(327, "Part of the if .. then .. endif statement") },
226 { "else", &c_else
, (F
| M
| RAWLIST
), 0, 0
227 DS(327, "Part of the if .. then .. endif statement") },
228 { "endif", &c_endif
, (F
| M
| RAWLIST
), 0, 0
229 DS(327, "Part of the if .. then .. endif statement") },
230 { "alternates", &c_alternates
, (M
| RAWLIST
), 0, 1000
231 DS(305, "Show or define an alternate list for the invoking user") },
232 { "ignore", &c_igfield
, (M
| RAWLIST
), 0, 1000
233 DS(321, "Add header fields to ignored LIST), or show that list") },
234 { "discard", &c_igfield
, (M
| RAWLIST
), 0, 1000
235 DS(321, "Add header fields to ignored LIST), or show that list") },
236 { "retain", &c_retfield
, (M
| RAWLIST
), 0, 1000
237 DS(370, "Add header fields to retained LIST), or show that list") },
238 { "saveignore", &c_saveigfield
, (M
| RAWLIST
), 0, 1000
239 DS(373, "Is to \"save\" what \"ignore\" is to \"type\"/\"print\"") },
240 { "savediscard", &c_saveigfield
, (M
| RAWLIST
), 0, 1000
241 DS(373, "Is to \"save\" what \"ignore\" is to \"type\"/\"print\"") },
242 { "saveretain", &c_saveretfield
, (M
| RAWLIST
), 0, 1000
243 DS(374, "Is to \"save\" what \"retain\" is to \"type\"/\"print\"") },
244 { "unignore", &c_unignore
, (M
| RAWLIST
), 0, 1000
245 DS(396, "Un\"ignore\" <header-fields>") },
246 { "unretain", &c_unretain
, (M
| RAWLIST
), 0, 1000
247 DS(399, "Un\"retain\" <header-fields>") },
248 { "unsaveignore", &c_unsaveignore
, (M
| RAWLIST
), 0, 1000
249 DS(400, "Un\"saveignore\" <header-fields>") },
250 { "unsaveretain", &c_unsaveretain
, (M
| RAWLIST
), 0, 1000
251 DS(401, "Un\"saveretain\" <header-fields>") },
252 { "inc", &c_newmail
, (A
| T
| NOLIST
), 0, 0
253 DS(346, "Check for new mail in current folder") },
254 { "newmail", &c_newmail
, (A
| T
| NOLIST
), 0, 0
255 DS(346, "Check for new mail in current folder") },
256 { "shortcut", &c_shortcut
, (M
| RAWLIST
), 0, 1000
257 DS(379, "Define a <shortcut> and <expansion>, or list shortcuts") },
258 { "unshortcut", &c_unshortcut
, (M
| RAWLIST
), 0, 1000
259 DS(403, "Delete <shortcut-list>") },
260 { "imap", &c_imap_imap
, (A
| STRLIST
), 0, 1000
261 DS(345, "Send command strings directly to the IMAP server") },
262 { "account", &c_account
, (M
| RAWLIST
), 0, 1000
263 DS(303, "Creates, selects or lists an email account") },
264 { "thread", &c_thread
, (A
| MSGLIST
), 0, 0
265 DS(384, "Create threaded view of current \"folder\"") },
266 { "unthread", &c_unthread
, (A
| MSGLIST
), 0, 0
267 DS(404, "Disable sorted or threaded mode") },
268 { "online", &c_connect
, (A
| NOLIST
), 0, 0
269 DS(314, "If disconnected, connect to IMAP mailbox") },
270 { "connect", &c_connect
, (A
| NOLIST
), 0, 0
271 DS(314, "If disconnected, connect to IMAP mailbox") },
272 { "disconnect", &c_disconnect
, (A
| NDMLIST
), 0, 0
273 DS(322, "If connected, disconnect from IMAP mailbox") },
274 { "sort", &c_sort
, (A
| RAWLIST
), 0, 1
275 DS(382, "Change sorting criteria (and addressing modes)") },
276 { "unsort", &c_unthread
, (A
| MSGLIST
), 0, 0
277 DS(404, "Disable sorted or threaded mode") },
278 { "cache", &c_cache
, (A
| MSGLIST
), 0, 0
279 DS(307, "Read specified <message list> into the IMAP cache") },
280 { "flag", &c_flag
, (A
| M
| MSGLIST
), 0, 0
281 DS(330, "(Un)Flag <message-list> (for special attention)") },
282 { "unflag", &c_unflag
, (A
| M
| MSGLIST
), 0, 0
283 DS(330, "(Un)Flag <message-list> (for special attention)") },
284 { "answered", &c_answered
, (A
| M
| MSGLIST
), 0, 0
285 DS(306, "Mark the given <message list> as \"answered\"") },
286 { "unanswered", &c_unanswered
, (A
| M
| MSGLIST
), 0, 0
287 DS(388, "Un\"answered\" <message-list>") },
288 { "draft", &c_draft
, (A
| M
| MSGLIST
), 0, 0
289 DS(324, "Mark <message-list> as draft") },
290 { "undraft", &c_undraft
, (A
| M
| MSGLIST
), 0, 0
291 DS(389, "Un\"draft\" <message-list>") },
292 { "define", &c_define
, (M
| RAWLIST
), 0, 2
293 DS(319, "Define a macro") },
294 { "undefine", &c_undefine
, (M
| RAWLIST
), 0, 1000
295 DS(391, "Un\"define\" all <macros>") },
296 { "unaccount", &c_unaccount
, (M
| RAWLIST
), 0, 1000
297 DS(432, "Delete all given <accounts>") },
298 { "call", &c_call
, (M
| RAWLIST
), 0, 1
299 DS(308, "Call a macro") },
300 { "~", &c_call
, (M
| RAWLIST
), 0, 1
301 DS(308, "Call a macro") },
302 { "move", &c_move
, (A
| M
| STRLIST
), 0, 0
303 DS(353, "Like \"copy\", but mark messages for deletion") },
304 { "mv", &c_move
, (A
| M
| STRLIST
), 0, 0
305 DS(353, "Like \"copy\", but mark messages for deletion") },
306 { "Move", &c_Move
, (A
| M
| STRLIST
), 0, 0
307 DS(354, "Like \"move\", but derive filename from first sender") },
308 { "Mv", &c_Move
, (A
| M
| STRLIST
), 0, 0
309 DS(354, "Like \"move\", but derive filename from first sender") },
310 { "noop", &c_noop
, (A
| M
| RAWLIST
), 0, 0
311 DS(357, "NOOP command if IMAP or POP folder; else noop") },
312 { "collapse", &c_collapse
, (A
| MSGLIST
), 0, 0
313 DS(312, "Collapse thread views for <message-list>") },
314 { "uncollapse", &c_uncollapse
, (A
| MSGLIST
), 0, 0
315 DS(390, "Uncollapse <message-list> if in threaded view") },
316 { "verify", &c_verify
, (A
| MSGLIST
), 0, 0
317 DS(405, "Verify <message-list>") },
318 { "decrypt", &c_decrypt
, (A
| M
| STRLIST
), 0, 0
319 DS(316, "Like \"copy\", but decrypt first, if encrypted") },
320 { "Decrypt", &c_Decrypt
, (A
| M
| STRLIST
), 0, 0
321 DS(317, "Like \"decrypt\", but derive filename from first sender") },
322 { "certsave", &c_certsave
, (A
| STRLIST
), 0, 0
323 DS(310, "Save S/MIME certificates of <message-list> to <file>") },
324 { "rename", &c_rename
, (M
| RAWLIST
), 0, 2
325 DS(367, "Rename <existing-folder> to <new-folder>") },
326 { "remove", &c_remove
, (M
| RAWLIST
), 0, 1000
327 DS(366, "Remove the named folders") },
328 { "show", &c_show
, (A
| MSGLIST
), 0, MMNDEL
329 DS(380, "Like \"print\", but show raw message content") },
330 { "Show", &c_show
, (A
| MSGLIST
), 0, MMNDEL
331 DS(380, "Like \"print\", but show raw message content") },
332 { "seen", &c_seen
, (A
| M
| MSGLIST
), 0, MMNDEL
333 DS(377, "Mark <message-list> as seen") },
334 { "Seen", &c_seen
, (A
| M
| MSGLIST
), 0, MMNDEL
335 DS(377, "Mark <message-list> as seen") },
336 { "fwdignore", &c_fwdigfield
, (M
| RAWLIST
), 0, 1000
337 DS(339, "Which header fields are to be ignored with \"forward\"") },
338 { "fwddiscard", &c_fwdigfield
, (M
| RAWLIST
), 0, 1000
339 DS(339, "Which header fields are to be ignored with \"forward\"") },
340 { "fwdretain", &c_fwdretfield
, (M
| RAWLIST
), 0, 1000
341 DS(340, "Which header fields have to be retained with \"forward\"") },
342 { "unfwdignore", &c_unfwdignore
, (M
| RAWLIST
), 0, 1000
343 DS(393, "Un\"fwdignore\" <header-fields>") },
344 { "unfwdretain", &c_unfwdretain
, (M
| RAWLIST
), 0, 1000
345 DS(394, "Un\"fwdretain\" <header-fields>") },
346 { "mimetypes", &c_mimetypes
, (M
| RAWLIST
), 0, 1000
347 DS(418, "Either <show> (default) or <clear> the mime.types cache") },
348 { "spamrate", &c_spam_rate
, (A
| M
| R
| MSGLIST
), 0, 0
349 DS(419, "Rate <message-list> via the spam detector") },
350 { "spamham", &c_spam_ham
, (A
| M
| R
| MSGLIST
), 0, 0
351 DS(420, "Teach the spam detector that <message-list> is ham") },
352 { "spamspam", &c_spam_spam
, (A
| M
| R
| MSGLIST
), 0, 0
353 DS(421, "Teach the spam detector that <message-list> is spam") },
354 { "spamforget", &c_spam_forget
, (A
| M
| R
| MSGLIST
), 0, 0
355 DS(422, "Force the spam detector to \"unlearn\" <message-list>") },
356 { "spamset", &c_spam_set
, (A
| M
| MSGLIST
), 0, 0
357 DS(423, "Set the spam flag for each message in <message-list>") },
358 { "spamclear", &c_spam_clear
, (A
| M
| MSGLIST
), 0, 0
359 DS(424, "Clear the spam flag for each message in <message-list>") },
360 { "ghost", &_ghost
, (M
| RAWLIST
), 0, 2
361 DS(425, "Define a <ghost> of <command>, or list all ghosts") },
362 { "unghost", &_unghost
, (M
| RAWLIST
), 1, 1000
363 DS(426, "Delete <ghost-list>") },
364 { "localopts", &c_localopts
, (M
| RAWLIST
), 1, 1
365 DS(427, "Inside `define' / `account': insulate modifications? <0> / <1>")},
366 { "cwd", &c_cwd
, (M
| NOLIST
), 0, 0
367 DS(428, "Print current working directory (CWD)") },
368 { "pwd", &c_cwd
, (M
| NOLIST
), 0, 0
369 DS(428, "Print current working directory (CWD)") },
370 { "varshow", &c_varshow
, (M
| RAWLIST
), 1, 1000
371 DS(430, "Show some informations about the given <variables>") },
372 { "features", &_features
, (M
| NOLIST
), 0, 0
373 DS(429, "Show features that are compiled into the MUA") },
374 { "version", &_version
, (M
| NOLIST
), 0, 0
375 DS(413, "Print the MUA version") },
377 { "history", &c_history
, (H
| I
| M
| V
| RAWLIST
), 0, 1
378 DS(431, "<show> (default), <clear> or select <NO> from editor history") },
381 { "sstats", &c_sstats
, (I
| M
| NOLIST
), 0, 0
382 DS(416, "Print statistics about the auto-reclaimed string store") },
383 { "smemtrace", &c_smemtrace
, (I
| M
| NOLIST
), 0, 0
384 DS(417, "Trace current memory usage afap") },
386 { NULL
, NULL
, 0, 0, 0 DS(0, "") }
408 /* vim:set fenc=utf-8:s-it-mode */