1 /*@ S-nail - a mail user agent derived from Berkeley Mail.
2 *@ This is included by ./lex_input.c and defines the command array.
4 * Copyright (c) 2000-2004 Gunnar Ritter, Freiburg i. Br., Germany.
5 * Copyright (c) 2012 - 2017 Steffen (Daode) Nurpmeso <steffen@sdaoden.eu>.
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. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 /* Some shorter aliases to be able to define a command in two lines */
37 #define MSGLIST ARG_MSGLIST
38 #define STRLIST ARG_STRLIST
39 #define RAWLIST ARG_RAWLIST
40 #define NDMLIST ARG_NDMLIST
41 #define WYSHLIST ARG_WYSHLIST
42 # define WYRALIST ARG_WYRALIST
44 #define ARG_ARGMASK ARG_ARGMASK
61 /* Note: the first command in here may NOT expand to an unsupported one! */
62 { "next", &c_next
, (A
| NDMLIST
), 0, MMNDEL
63 DS(N_("Goes to the next message (-list) and prints it")) },
64 { "alias", &c_alias
, (M
| WYRALIST
), 0, 1000
65 DS(N_("Show all (or <alias>), or (re)define <alias> to <:data:>")) },
66 { "print", &c_type
, (A
| MSGLIST
), 0, MMNDEL
67 DS(N_("Type all messages of <msglist>, honouring `ignore' / `retain'")) },
68 { "type", &c_type
, (A
| MSGLIST
), 0, MMNDEL
69 DS(N_("Type all messages of <msglist>, honouring `ignore' / `retain'")) },
70 { "Type", &c_Type
, (A
| MSGLIST
), 0, MMNDEL
71 DS(N_("Like `type', but bypass `ignore' / `retain'")) },
72 { "Print", &c_Type
, (A
| MSGLIST
), 0, MMNDEL
73 DS(N_("Like `print', but bypass `ignore' / `retain'")) },
74 { "visual", &c_visual
, (A
| I
| S
| MSGLIST
), 0, MMNORM
75 DS(N_("Edit <msglist>")) },
76 { "top", &c_top
, (A
| MSGLIST
), 0, MMNDEL
77 DS(N_("Type first *toplines* of all messages in <msglist>")) },
78 { "Top", &c_Top
, (A
| MSGLIST
), 0, MMNDEL
79 DS(N_("Like `top', but bypass `ignore' / `retain'")) },
80 { "touch", &c_stouch
, (A
| W
| MSGLIST
), 0, MMNDEL
81 DS(N_("Mark <msglist> for saving in *mbox*")) },
82 { "preserve", &c_preserve
, (A
| S
| W
| MSGLIST
), 0, MMNDEL
83 DS(N_("Save <msglist> in system mailbox instead of *MBOX*")) },
84 { "delete", &c_delete
, (A
| W
| P
| MSGLIST
), 0, MMNDEL
85 DS(N_("Delete <msglist>")) },
86 { "dp", &c_deltype
, (A
| W
| MSGLIST
), 0, MMNDEL
87 DS(N_("Delete the current message, then type the next")) },
88 { "dt", &c_deltype
, (A
| W
| MSGLIST
), 0, MMNDEL
89 DS(N_("Delete the current message, then type the next")) },
90 { "undelete", &c_undelete
, (A
| P
| MSGLIST
), MDELETED
,MMNDEL
91 DS(N_("Un`delete' <msglist>")) },
92 { "unset", &c_unset
, (G
| M
| X
| WYRALIST
), 1, 1000
93 DS(N_("Unset <option-list>")) },
94 { "mail", &c_sendmail
, (I
| M
| R
| S
| STRLIST
), 0, 0
95 DS(N_("Compose mail; recipients may be given as arguments")) },
96 { "Mail", &c_Sendmail
, (I
| M
| R
| S
| STRLIST
), 0, 0
97 DS(N_("Like `mail', but derive filename from first recipient")) },
98 { "mbox", &c_mboxit
, (A
| W
| MSGLIST
), 0, 0
99 DS(N_("Indicate that <msglist> is to be stored in *MBOX*")) },
100 { "more", &c_more
, (A
| MSGLIST
), 0, MMNDEL
101 DS(N_("Invoke the pager on the given messages")) },
102 { "page", &c_more
, (A
| MSGLIST
), 0, MMNDEL
103 DS(N_("Invoke the pager on the given messages")) },
104 { "More", &c_More
, (A
| MSGLIST
), 0, MMNDEL
105 DS(N_("Invoke the pager on the given messages")) },
106 { "Page", &c_More
, (A
| MSGLIST
), 0, MMNDEL
107 DS(N_("Invoke the pager on the given messages")) },
108 { "unread", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
109 DS(N_("Mark <msglist> as not being read")) },
110 { "Unread", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
111 DS(N_("Mark <msglist> as not being read")) },
112 { "new", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
113 DS(N_("Mark <msglist> as not being read")) },
114 { "New", &c_unread
, (A
| MSGLIST
), 0, MMNDEL
115 DS(N_("Mark <msglist> as not being read")) },
116 { "!", &c_shell
, (S
| STRLIST
), 0, 0
117 DS(N_("Execute <shell-command>")) },
118 { "copy", &c_copy
, (A
| M
| STRLIST
), 0, 0
119 DS(N_("Copy <msglist>, but don't mark them for deletion")) },
120 { "Copy", &c_Copy
, (A
| M
| S
| STRLIST
), 0, 0
121 DS(N_("Like `copy', but derive filename from first sender")) },
122 { "chdir", &c_chdir
, (M
| WYRALIST
), 0, 1
123 DS(N_("Change CWD to the specified/the login directory")) },
124 { "cd", &c_chdir
, (M
| X
| WYRALIST
), 0, 1
125 DS(N_("Change working directory to the specified/the login directory")) },
126 { "save", &c_save
, (A
| STRLIST
), 0, 0
127 DS(N_("Append <msglist> to <file>")) },
128 { "Save", &c_Save
, (A
| S
| STRLIST
), 0, 0
129 DS(N_("Like `save', but derive filename from first sender")) },
130 { "source", &c_source
, (M
| WYRALIST
), 1, 1
131 DS(N_("Read commands from <file>")) },
132 { "source_if", &c_source_if
, (M
| WYRALIST
), 1, 1
133 DS(N_("If <file> can be opened successfully, read commands from it")) },
134 { "set", &c_set
, (G
| M
| X
| WYRALIST
), 0, 1000
135 DS(N_("Print all variables, or set (a) <variable>(s)")) },
136 { "shell", &c_dosh
, (I
| S
| WYSHLIST
), 0, 0
137 DS(N_("Invoke an interactive shell")) },
138 { "unalias", &c_unalias
, (M
| WYRALIST
), 1, 1000
139 DS(N_("Un`alias' <name-list> (* for all)")) },
140 { "write", &c_write
, (A
| STRLIST
), 0, 0
141 DS(N_("Write (append) to <file>")) },
142 { "from", &c_from
, (A
| MSGLIST
), 0, MMNORM
143 DS(N_("Type (matching) headers of <msglist> (a search specification)")) },
144 { "search", &c_from
, (A
| MSGLIST
), 0, MMNORM
145 DS(N_("Search for <msglist>, type matching headers")) },
146 { "file", &c_file
, (M
| T
| WYRALIST
), 0, 1
147 DS(N_("Open a new <mailbox> or show the current one")) },
148 { "followup", &c_followup
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
149 DS(N_("Like `reply', but derive filename from first sender")) },
150 { "followupall", &c_followupall
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
151 DS(N_("Like `reply', but derive filename from first sender")) },
152 { "followupsender", &c_followupsender
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
153 DS(N_("Like `Followup', but always reply to the sender only")) },
154 { "folder", &c_file
, (M
| T
| WYRALIST
), 0, 1
155 DS(N_("Open a new <mailbox> or show the current one")) },
156 { "folders", &c_folders
, (M
| T
| WYRALIST
), 0, 1
157 DS(N_("List mailboxes below the given or the global folder")) },
158 { "z", &c_scroll
, (A
| M
| STRLIST
), 0, 0
159 DS(N_("Scroll header display as indicated by the argument (0,-,+,$)")) },
160 { "Z", &c_Scroll
, (A
| M
| STRLIST
), 0, 0
161 DS(N_("Like `z', but continues to the next flagged message")) },
162 { "headers", &c_headers
, (A
| M
| MSGLIST
), 0, MMNDEL
163 DS(N_("Type a page of headers (with the first of <msglist> if given)")) },
164 { "help", &a_lex_c_help
, (M
| X
| WYRALIST
), 0, 1
165 DS(N_("Show help [[Option] for the given command]]")) },
166 { "?", &a_lex_c_help
, (M
| X
| WYRALIST
), 0, 1
167 DS(N_("Show help [[Option] for the given command]]")) },
168 { "=", &c_pdot
, (A
| WYSHLIST
), 0, 0
169 DS(N_("Show current message number")) },
170 { "Reply", &c_Reply
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
171 DS(N_("Reply to originator, exclusively")) },
172 { "Respond", &c_Reply
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
173 DS(N_("Reply to originator, exclusively")) },
174 { "Followup", &c_Followup
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
175 DS(N_("Like `Reply', but derive filename from first sender")) },
176 { "reply", &c_reply
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
177 DS(N_("Reply to originator and recipients of <msglist>")) },
178 { "replyall", &c_replyall
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
179 DS(N_("Reply to originator and recipients of <msglist>")) },
180 { "replysender", &c_replysender
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
181 DS(N_("Reply to originator, exclusively")) },
182 { "respond", &c_reply
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
183 DS(N_("Reply to originators and recipients of <msglist>")) },
184 { "respondall", &c_replyall
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
185 DS(N_("Reply to originators and recipients of <msglist>")) },
186 { "respondsender", &c_replysender
, (A
| I
| R
| S
| MSGLIST
),0, MMNDEL
187 DS(N_("Reply to originator, exclusively")) },
188 { "Resend", &c_Resend
, (A
| R
| S
| STRLIST
), 0, MMNDEL
189 DS(N_("Like `resend', but don't add Resent-* header lines")) },
190 { "Redirect", &c_Resend
, (A
| R
| S
| STRLIST
), 0, MMNDEL
191 DS(N_("Like `resend', but don't add Resent-* header lines")) },
192 { "resend", &c_resend
, (A
| R
| S
| STRLIST
), 0, MMNDEL
193 DS(N_("Resend <msglist> to <user>, add Resent-* header lines")) },
194 { "redirect", &c_resend
, (A
| R
| S
| STRLIST
), 0, MMNDEL
195 DS(N_("Resend <msglist> to <user>, add Resent-* header lines")) },
196 { "Forward", &c_Forward
, (A
| R
| S
| STRLIST
), 0, MMNDEL
197 DS(N_("Like `forward', but derive filename from <address>")) },
198 { "Fwd", &c_Forward
, (A
| R
| S
| STRLIST
), 0, MMNDEL
199 DS(N_("Like `forward', but derive filename from <address>")) },
200 { "forward", &c_forward
, (A
| R
| S
| STRLIST
), 0, MMNDEL
201 DS(N_("Forward <message> to <address>")) },
202 { "fwd", &c_forward
, (A
| R
| S
| STRLIST
), 0, MMNDEL
203 DS(N_("Forward <message> to <address>")) },
204 { "edit", &c_editor
, (G
| A
| I
| S
| MSGLIST
), 0, MMNORM
205 DS(N_("Edit <msglist>")) },
206 { "echo", &c_echo
, (G
| M
| X
| WYSHLIST
), 0, 1000
207 DS(N_("Echo arguments, and a trailing newline, to standard output")) },
208 { "echoerr", &c_echoerr
, (G
| M
| X
| WYSHLIST
), 0, 1000
209 DS(N_("Echo arguments, and a trailing newline, to standard error")) },
210 { "echon", &c_echon
, (G
| M
| X
| WYSHLIST
), 0, 1000
211 DS(N_("Echo arguments, without a trailing newline, to standard output")) },
212 { "echoerrn", &c_echoerrn
, (G
| M
| X
| WYSHLIST
), 0, 1000
213 DS(N_("Echo arguments, without a trailing newline, to standard error")) },
214 { "quit", &a_lex_c_quit
, WYSHLIST
, 0, 0
215 DS(N_("Terminate session, saving messages as necessary")) },
216 { "list", &a_lex_c_list
, (M
| STRLIST
), 0, 0
217 DS(N_("List all commands (with argument: in prefix search order)")) },
218 { "xit", &a_lex_c_exit
, (M
| X
| WYSHLIST
), 0, 0
219 DS(N_("Immediately return to the shell without saving")) },
220 { "exit", &a_lex_c_exit
, (M
| X
| WYSHLIST
), 0, 0
221 DS(N_("Immediately return to the shell without saving")) },
222 { "pipe", &c_pipe
, (A
| STRLIST
), 0, MMNDEL
223 DS(N_("Pipe <msglist> to <command>, honouring `ignore' / `retain'")) },
224 { "|", &c_pipe
, (A
| STRLIST
), 0, MMNDEL
225 DS(N_("Pipe <msglist> to <command>, honouring `ignore' / `retain'")) },
226 { "Pipe", &c_Pipe
, (A
| STRLIST
), 0, MMNDEL
227 DS(N_("Like `pipe', but bypass `ignore' / `retain'")) },
228 { "size", &c_messize
, (A
| MSGLIST
), 0, MMNDEL
229 DS(N_("Show size in bytes for <msglist>")) },
230 { "hold", &c_preserve
, (A
| S
| W
| MSGLIST
), 0, MMNDEL
231 DS(N_("Save <msglist> in system mailbox instead of *MBOX*")) },
232 { "if", &c_if
, (G
| F
| M
| X
| RAWLIST
), 1, 1000
233 DS(N_("Part of the if..elif..else..endif statement")) },
234 { "else", &c_else
, (G
| F
| M
| X
| WYSHLIST
), 0, 0
235 DS(N_("Part of the if..elif..else..endif statement")) },
236 { "elif", &c_elif
, (G
| F
| M
| X
| RAWLIST
), 1, 1000
237 DS(N_("Part of the if..elif..else..endif statement")) },
238 { "endif", &c_endif
, (G
| F
| M
| X
| WYSHLIST
), 0, 0
239 DS(N_("Part of the if..elif..else..endif statement")) },
240 { "alternates", &c_alternates
, (M
| WYRALIST
), 0, 1000
241 DS(N_("Show or define an alternate address list for the invoking user")) },
242 { "ignore", &c_ignore
, (M
| WYRALIST
), 0, 1000
243 DS(N_("Add <header-list> to the ignored LIST, or show that list")) },
244 { "discard", &c_ignore
, (M
| WYRALIST
), 0, 1000
245 DS(N_("Add <header-list> to the ignored LIST, or show that list")) },
246 { "retain", &c_retain
, (M
| WYRALIST
), 0, 1000
247 DS(N_("Add <header-list> to retained list, or show that list")) },
248 { "headerpick", &c_headerpick
, (M
| WYSHLIST
), 0, 1000
249 DS(N_("Header selection: [<context> [<type> [<action> <header-list>]]]"))},
250 { "saveignore", &c_saveignore
, (O
| M
| RAWLIST
), 0, 1000
251 DS(N_("Is to `save' what `ignore' is to `type' / `print'")) },
252 { "savediscard", &c_saveignore
, (O
| M
| RAWLIST
), 0, 1000
253 DS(N_("Is to `save' what `ignore' is to `type' / `print'")) },
254 { "saveretain", &c_saveretain
, (O
| M
| RAWLIST
), 0, 1000
255 DS(N_("Is to `save' what `retain' is to `type' / `print'")) },
256 { "unignore", &c_unignore
, (M
| WYRALIST
), 0, 1000
257 DS(N_("Un`ignore' <header-list>")) },
258 { "unretain", &c_unretain
, (M
| WYRALIST
), 0, 1000
259 DS(N_("Un`retain' <header-list>")) },
260 { "unsaveignore", &c_unsaveignore
, (O
| M
| RAWLIST
), 0, 1000
261 DS(N_("Un`saveignore' <header-list>")) },
262 { "unsaveretain", &c_unsaveretain
, (O
| M
| RAWLIST
), 0, 1000
263 DS(N_("Un`saveretain' <header-list>")) },
264 { "newmail", &c_newmail
, (A
| T
| WYSHLIST
), 0, 0
265 DS(N_("Check for new mail in current folder")) },
266 { "shortcut", &c_shortcut
, (M
| WYRALIST
), 0, 1000
267 DS(N_("Define <shortcut>s and their <expansion>, or list shortcuts")) },
268 { "unshortcut", &c_unshortcut
, (M
| WYRALIST
), 1, 1000
269 DS(N_("Delete <shortcut-list> (* for all)")) },
270 { "account", &c_account
, (M
| WYSHLIST
), 0, 1000
271 DS(N_("Create or select <account>, or list all accounts")) },
272 { "thread", &c_thread
, (A
| O
| MSGLIST
), 0, 0
273 DS(N_("Create threaded view of the current `file'")) },
274 { "unthread", &c_unthread
, (A
| O
| MSGLIST
), 0, 0
275 DS(N_("Disable sorted or threaded mode")) },
276 { "sort", &c_sort
, (A
| WYSHLIST
), 0, 1
277 DS(N_("Change sorting to: date,from,size,spam,status,subject,thread,to"))},
278 { "unsort", &c_unthread
, (A
| MSGLIST
), 0, 0
279 DS(N_("Disable sorted or threaded mode")) },
280 { "flag", &c_flag
, (A
| M
| MSGLIST
), 0, 0
281 DS(N_("(Un)Flag <msglist> (for special attention)")) },
282 { "unflag", &c_unflag
, (A
| M
| MSGLIST
), 0, 0
283 DS(N_("(Un)Flag <msglist> (for special attention)")) },
284 { "answered", &c_answered
, (A
| M
| MSGLIST
), 0, 0
285 DS(N_("Mark the given <msglist> as answered")) },
286 { "unanswered", &c_unanswered
, (A
| M
| MSGLIST
), 0, 0
287 DS(N_("Un`answered' <msglist>")) },
288 { "draft", &c_draft
, (A
| M
| MSGLIST
), 0, 0
289 DS(N_("Mark <msglist> as draft")) },
290 { "undraft", &c_undraft
, (A
| M
| MSGLIST
), 0, 0
291 DS(N_("Un`draft' <msglist>")) },
292 { "define", &c_define
, (M
| X
| WYSHLIST
), 0, 2
293 DS(N_("Define a <macro> or show the currently defined ones")) },
294 { "undefine", &c_undefine
, (M
| X
| WYSHLIST
), 1, 1000
295 DS(N_("Un`define' all given <macros> (* for all)")) },
296 { "unaccount", &c_unaccount
, (M
| WYSHLIST
), 1, 1000
297 DS(N_("Delete all given <accounts> (* for all)")) },
298 { "call", &c_call
, (M
| X
| WYSHLIST
), 1, 1000
299 DS(N_("Call macro <name>")) },
300 { "~", &c_call
, (M
| X
| WYSHLIST
), 1, 1000
301 DS(N_("Call a macro")) },
302 { "call_if", &c_call_if
, (M
| X
| WYRALIST
), 1, 100
303 DS(N_("Call macro <name> if it exists")) },
304 { "shift", &c_shift
, (M
| X
| WYSHLIST
), 0, 1
305 DS(N_("In a `call'ed macro, shift positional parameters")) },
306 { "return", &c_return
, (M
| X
| EM
| WYSHLIST
), 0, 2
307 DS(N_("Return control [with <return value> [<exit status>]] from macro"))},
308 { "move", &c_move
, (A
| M
| STRLIST
), 0, 0
309 DS(N_("Like `copy', but mark messages for deletion")) },
310 { "mv", &c_move
, (A
| M
| STRLIST
), 0, 0
311 DS(N_("Like `copy', but mark messages for deletion")) },
312 { "Move", &c_Move
, (A
| M
| S
| STRLIST
), 0, 0
313 DS(N_("Like `move', but derive filename from first sender")) },
314 { "Mv", &c_Move
, (A
| M
| S
| STRLIST
), 0, 0
315 DS(N_("Like `move', but derive filename from first sender")) },
316 { "noop", &c_noop
, (A
| M
| WYSHLIST
), 0, 0
317 DS(N_("NOOP command if current `file' is accessed via network")) },
318 { "collapse", &c_collapse
, (A
| MSGLIST
), 0, 0
319 DS(N_("Collapse thread views for <msglist>")) },
320 { "uncollapse", &c_uncollapse
, (A
| MSGLIST
), 0, 0
321 DS(N_("Uncollapse <msglist> if in threaded view")) },
322 { "verify", &c_verify
, (A
| MSGLIST
), 0, 0
323 DS(N_("Verify <msglist>")) },
324 { "decrypt", &c_decrypt
, (A
| M
| STRLIST
), 0, 0
325 DS(N_("Like `copy', but decrypt first, if encrypted")) },
326 { "Decrypt", &c_Decrypt
, (A
| M
| S
| STRLIST
), 0, 0
327 DS(N_("Like `decrypt', but derive filename from first sender")) },
328 { "certsave", &c_certsave
, (A
| STRLIST
), 0, 0
329 DS(N_("Save S/MIME certificates of <msglist> to <file>")) },
330 { "rename", &c_rename
, (M
| WYRALIST
), 0, 2
331 DS(N_("Rename <existing-folder> to <new-folder>")) },
332 { "remove", &c_remove
, (M
| WYRALIST
), 0, 1000
333 DS(N_("Remove the named folders")) },
334 { "show", &c_show
, (A
| MSGLIST
), 0, MMNDEL
335 DS(N_("Like `type', but show raw message content of <msglist>")) },
336 { "Show", &c_show
, (A
| MSGLIST
), 0, MMNDEL
337 DS(N_("Like `Type', but show raw message content of <msglist>")) },
338 { "seen", &c_seen
, (A
| M
| MSGLIST
), 0, MMNDEL
339 DS(N_("Mark <msglist> as seen")) },
340 { "Seen", &c_seen
, (A
| M
| MSGLIST
), 0, MMNDEL
341 DS(N_("Mark <msglist> as seen")) },
342 { "fwdignore", &c_fwdignore
, (O
| M
| RAWLIST
), 0, 1000
343 DS(N_("Control <header-list> to be ignored with `forward'")) },
344 { "fwddiscard", &c_fwdignore
, (O
| M
| RAWLIST
), 0, 1000
345 DS(N_("Control <header-list> to be ignored with `forward'")) },
346 { "fwdretain", &c_fwdretain
, (O
| M
| RAWLIST
), 0, 1000
347 DS(N_("Control <header-list> to be retained with `forward'")) },
348 { "unfwdignore", &c_unfwdignore
, (O
| M
| RAWLIST
), 0, 1000
349 DS(N_("Un`fwdignore' <header-list>")) },
350 { "unfwdretain", &c_unfwdretain
, (O
| M
| RAWLIST
), 0, 1000
351 DS(N_("Un`fwdretain' <header-list>")) },
352 { "mimetype", &c_mimetype
, (M
| WYRALIST
), 0, 1000
353 DS(N_("(Load and) show all known MIME types, or define some")) },
354 { "unmimetype", &c_unmimetype
, (M
| WYRALIST
), 1, 1000
355 DS(N_("Delete <type>s (reset, * for all; former reinitializes)")) },
356 { "spamrate", &c_spam_rate
, (A
| M
| MSGLIST
), 0, 0
357 DS(N_("Rate <msglist> via the spam detector")) },
358 { "spamham", &c_spam_ham
, (A
| M
| MSGLIST
), 0, 0
359 DS(N_("Teach the spam detector that <msglist> is ham")) },
360 { "spamspam", &c_spam_spam
, (A
| M
| MSGLIST
), 0, 0
361 DS(N_("Teach the spam detector that <msglist> is spam")) },
362 { "spamforget", &c_spam_forget
, (A
| M
| MSGLIST
), 0, 0
363 DS(N_("Force the spam detector to unlearn <msglist>")) },
364 { "spamset", &c_spam_set
, (A
| M
| MSGLIST
), 0, 0
365 DS(N_("Set the spam flag for each message in <msglist>")) },
366 { "spamclear", &c_spam_clear
, (A
| M
| MSGLIST
), 0, 0
367 DS(N_("Clear the spam flag for each message in <msglist>")) },
368 { "cwd", &c_cwd
, (M
| V
| X
| WYSHLIST
), 0, 0
369 DS(N_("Print current working directory (CWD)")) },
370 { "varshow", &c_varshow
, (G
| M
| X
| WYRALIST
), 1, 1000
371 DS(N_("Show some informations about the given <variables>")) },
372 { "varedit", &c_varedit
, (G
| I
| M
| WYRALIST
), 1, 1000
373 DS(N_("Edit the value(s) of (an) variable(s), or create them")) },
374 { "vexpr", &c_vexpr
, (G
| M
| V
| X
| EM
| WYSHLIST
), 2, 1000
375 DS(N_("Evaluate according to <operator> any <:arguments:>")) },
376 { "File", &c_File
, (M
| T
| WYRALIST
), 0, 1
377 DS(N_("Open a new mailbox readonly, or show the current mailbox")) },
378 { "Folder", &c_File
, (M
| T
| WYRALIST
), 0, 1
379 DS(N_("Open a new mailbox readonly, or show the current mailbox")) },
380 { "mlist", &c_mlist
, (M
| WYRALIST
), 0, 1000
381 DS(N_("Show all known mailing lists or define some")) },
382 { "unmlist", &c_unmlist
, (M
| WYRALIST
), 1, 1000
383 DS(N_("Un`mlist' <name-list> (* for all)")) },
384 { "mlsubscribe", &c_mlsubscribe
, (M
| WYRALIST
), 0, 1000
385 DS(N_("Show all mailing list subscriptions or define some")) },
386 { "unmlsubscribe", &c_unmlsubscribe
, (M
| WYRALIST
), 1, 1000
387 DS(N_("Un`mlsubscribe' <name-list> (* for all)"))},
388 { "Lreply", &c_Lreply
, (A
| I
| R
| S
| MSGLIST
), 0, MMNDEL
389 DS(N_("Mailing-list reply to the given <msglist>")) },
390 { "errors", &c_errors
, (H
| I
| M
| WYSHLIST
), 0, 1
391 DS(N_("Either [<show>] or <clear> the error message ring")) },
392 { "dotmove", &c_dotmove
, (A
| STRLIST
), 1, 1
393 DS(N_("Move the dot up <-> or down <+> by one")) },
395 { "eval", &a_lex_c_eval
, (G
| M
| X
| EM
| WYSHLIST
), 1, 1000
396 DS(N_("Construct command from <:arguments:>, reuse its $?")) },
397 { "ghost", &a_lex_c_ghost
, (M
| X
| WYRALIST
), 0, 1000
398 DS(N_("Print or create <ghost> [<command>], or list all ghosts")) },
399 { "unghost", &a_lex_c_unghost
, (M
| X
| WYRALIST
), 1, 1000
400 DS(N_("Delete <ghost-list>")) },
401 { "localopts", &c_localopts
, (H
| M
| X
| WYSHLIST
), 1, 1
402 DS(N_("Inside `define' / `account': isolate modifications? <boolean>"))},
403 { "read", &a_lex_c_read
, (G
| M
| X
| EM
| WYSHLIST
), 1, 1000
404 DS(N_("Read a line from standard input into <variable>(s)")) },
405 { "version", &a_lex_c_version
, (H
| M
| X
| WYSHLIST
), 0, 0
406 DS(N_("Show the version and feature set of the program")) },
408 { "history", &c_history
, (H
| I
| M
| WYSHLIST
), 0, 1
409 DS(N_("<show> (default), <clear> or select <NO> from editor history")) },
410 { "bind", &c_bind
, (M
| STRLIST
), 1, 1000
411 DS(N_("For <context> (base), [<show>] or bind <key[:,key:]> [<:data:>]"))},
412 { "unbind", &c_unbind
, (M
| STRLIST
), 2, 2
413 DS(N_("Un`bind' <context> <key[:,key:]> (* for all)")) },
415 { "netrc", &c_netrc
, (M
| WYSHLIST
), 0, 1
416 DS(N_("[<show>], <load> or <clear> the .netrc cache")) },
418 { "colour", &c_colour
, (M
| WYSHLIST
), 1, 4
419 DS(N_("Show colour settings of <type> (1, 8, 256, all) or define one")) },
420 { "uncolour", &c_uncolour
, (M
| WYSHLIST
), 2, 3
421 DS(N_("Un`colour' <type> <mapping> (* for all) [<precondition>]")) },
423 { "environ", &c_environ
, (G
| M
| X
| WYSHLIST
), 2, 1000
424 DS(N_("<link|set|unset> (an) environment <variable>(s)")) },
426 { "addrcodec", &c_addrcodec
, (G
| M
| V
| X
| EM
| WYSHLIST
), 1, 1000
427 DS(N_("Form an address of <:arguments:>")) },
428 { "urlcodec", &c_urlcodec
, (G
| M
| V
| X
| EM
| WYSHLIST
), 2, 1000
429 DS(N_("URL percent <[path]enc[ode]|[path]dec[ode]> <:arguments:>")) },
430 { "urlencode", &c_urlencode
, (O
| G
| M
| X
| WYRALIST
), 1, 1000
431 DS(N_("Encode <string-list> for usage in an URL")) },
432 { "urldecode", &c_urldecode
, (O
| G
| M
| X
| WYRALIST
), 1, 1000
433 DS(N_("Decode the URL-encoded <URL-list> into strings")) },
435 #ifdef HAVE_MEMORY_DEBUG
436 { "memtrace", &c_memtrace
, (I
| M
| WYSHLIST
), 0, 0
437 DS(N_("Trace current memory usage afap")) },
440 { "sigstate", &c_sigstate
, (I
| M
| WYSHLIST
), 0, 0
441 DS(N_("Show signal handler states")) },