"Fossies" - the Fresh Open Source Software Archive

Member "s-nail-14.9.11/cmd-tab.h" (8 Aug 2018, 37268 Bytes) of package /linux/misc/s-nail-14.9.11.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "cmd-tab.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 14.9.10_vs_14.9.11.

    1 /*@ S-nail - a mail user agent derived from Berkeley Mail.
    2  *@ This is included by ./cmd-tab.c and defines the command array.
    3  *@ TODO This should be generated by a script from a template.  It should
    4  *@ TODO sort the entries alphabetically, and create an array that is indexed
    5  *@ TODO by first cmd letter with modulo, the found number is used to index a
    6  *@ TODO multi-dimensional array with alphasorted entries.  It should ensure
    7  *@ TODO that (exact!) POSIX abbreviations order first.
    8  *@ TODO And the data (and n_cmd_arg_desc) should be placed in special crafted
    9  *@ TODO comments in or before the function source, to be collected by script.
   10  *
   11  * Copyright (c) 2000-2004 Gunnar Ritter, Freiburg i. Br., Germany.
   12  * Copyright (c) 2012 - 2018 Steffen (Daode) Nurpmeso <steffen@sdaoden.eu>.
   13  * SPDX-License-Identifier: BSD-3-Clause TODO ISC
   14  */
   15 /*
   16  * Copyright (c) 1980, 1993
   17  *      The Regents of the University of California.  All rights reserved.
   18  *
   19  * Redistribution and use in source and binary forms, with or without
   20  * modification, are permitted provided that the following conditions
   21  * are met:
   22  * 1. Redistributions of source code must retain the above copyright
   23  *    notice, this list of conditions and the following disclaimer.
   24  * 2. Redistributions in binary form must reproduce the above copyright
   25  *    notice, this list of conditions and the following disclaimer in the
   26  *    documentation and/or other materials provided with the distribution.
   27  * 3. Neither the name of the University nor the names of its contributors
   28  *    may be used to endorse or promote products derived from this software
   29  *    without specific prior written permission.
   30  *
   31  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   32  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   33  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   34  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   35  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   39  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   40  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   41  * SUCH DAMAGE.
   42  */
   43 
   44 /* Because of the largish TODO, we yet become included twice.
   45  * Not indented for that */
   46 #ifndef n_CMD_TAB_H
   47 # define n_CMD_TAB_H
   48 
   49 #ifdef HAVE_KEY_BINDINGS
   50 # define a_CTAB_CAD_BIND n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_bind)
   51 n_CMD_ARG_DESC_SUBCLASS_DEF(bind, 3, a_ctab_cad_bind){
   52    {n_CMD_ARG_DESC_SHEXP, n_SHEXP_PARSE_TRIM_IFSSPACE}, /* context */
   53    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION | n_CMD_ARG_DESC_HONOUR_STOP,
   54       n_SHEXP_PARSE_DRYRUN}, /* subcommand / key sequence */
   55    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION |
   56          n_CMD_ARG_DESC_GREEDY | n_CMD_ARG_DESC_GREEDY_JOIN |
   57          n_CMD_ARG_DESC_HONOUR_STOP,
   58       n_SHEXP_PARSE_IGNORE_EMPTY | n_SHEXP_PARSE_TRIM_IFSSPACE} /* expansion */
   59 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
   60 #else
   61 # define a_CTAB_CAD_BIND NULL
   62 #endif
   63 
   64 n_CMD_ARG_DESC_SUBCLASS_DEF(call, 2, a_ctab_cad_call){
   65    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_HONOUR_STOP,
   66       n_SHEXP_PARSE_TRIM_IFSSPACE}, /* macro name */
   67    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION |
   68          n_CMD_ARG_DESC_GREEDY | n_CMD_ARG_DESC_HONOUR_STOP,
   69       n_SHEXP_PARSE_IFS_VAR | n_SHEXP_PARSE_TRIM_IFSSPACE} /* args */
   70 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
   71 
   72 #ifdef HAVE_TLS
   73 # define a_CTAB_CAD_CERTSAVE n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_certsave)
   74 n_CMD_ARG_DESC_SUBCLASS_DEF(certsave, 1, a_ctab_cad_certsave){
   75    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
   76       n_SHEXP_PARSE_TRIM_IFSSPACE}
   77 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
   78 #else
   79 # define a_CTAB_CAD_CERTSAVE NULL
   80 #endif
   81 
   82 n_CMD_ARG_DESC_SUBCLASS_DEF(copy, 1, a_ctab_cad_copy){
   83    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
   84       n_SHEXP_PARSE_TRIM_IFSSPACE}
   85 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
   86 
   87 n_CMD_ARG_DESC_SUBCLASS_DEF(Copy, 1, a_ctab_cad_Copy){
   88    {n_CMD_ARG_DESC_MSGLIST | n_CMD_ARG_DESC_GREEDY,
   89       n_SHEXP_PARSE_TRIM_IFSSPACE}
   90 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
   91 
   92 n_CMD_ARG_DESC_SUBCLASS_DEF(decrypt, 1, a_ctab_cad_decrypt){
   93    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
   94       n_SHEXP_PARSE_TRIM_IFSSPACE}
   95 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
   96 
   97 n_CMD_ARG_DESC_SUBCLASS_DEF(Decrypt, 1, a_ctab_cad_Decrypt){
   98    {n_CMD_ARG_DESC_MSGLIST | n_CMD_ARG_DESC_GREEDY,
   99       n_SHEXP_PARSE_TRIM_IFSSPACE}
  100 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  101 
  102 n_CMD_ARG_DESC_SUBCLASS_DEF(digmsg, 3, a_ctab_cad_digmsg){ /* XXX 2 OR 3 */
  103    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_HONOUR_STOP,
  104       n_SHEXP_PARSE_TRIM_IFSSPACE}, /* subcommand (/ msgno/-) */
  105    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_HONOUR_STOP,
  106       n_SHEXP_PARSE_TRIM_IFSSPACE}, /* msgno/- (/ first part of user cmd) */
  107    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION |
  108          n_CMD_ARG_DESC_GREEDY | n_CMD_ARG_DESC_GREEDY_JOIN |
  109          n_CMD_ARG_DESC_HONOUR_STOP,
  110       n_SHEXP_PARSE_IGNORE_EMPTY | n_SHEXP_PARSE_TRIM_IFSSPACE} /* args */
  111 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  112 
  113 n_CMD_ARG_DESC_SUBCLASS_DEF(forward, 1, a_ctab_cad_forward){
  114    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY |
  115          n_CMD_ARG_DESC_MSGLIST_NEEDS_SINGLE,
  116       n_SHEXP_PARSE_TRIM_IFSSPACE}
  117 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  118 
  119 n_CMD_ARG_DESC_SUBCLASS_DEF(Forward, 1, a_ctab_cad_Forward){
  120    {n_CMD_ARG_DESC_MSGLIST | n_CMD_ARG_DESC_GREEDY |
  121          n_CMD_ARG_DESC_MSGLIST_NEEDS_SINGLE,
  122       n_SHEXP_PARSE_TRIM_IFSSPACE}
  123 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  124 
  125 n_CMD_ARG_DESC_SUBCLASS_DEF(move, 1, a_ctab_cad_move){
  126    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
  127       n_SHEXP_PARSE_TRIM_IFSSPACE}
  128 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  129 
  130 n_CMD_ARG_DESC_SUBCLASS_DEF(Move, 1, a_ctab_cad_Move){
  131    {n_CMD_ARG_DESC_MSGLIST | n_CMD_ARG_DESC_GREEDY,
  132       n_SHEXP_PARSE_TRIM_IFSSPACE}
  133 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  134 
  135 n_CMD_ARG_DESC_SUBCLASS_DEF(pdot, 1, a_ctab_cad_pdot){
  136    {n_CMD_ARG_DESC_MSGLIST | n_CMD_ARG_DESC_GREEDY,
  137       n_SHEXP_PARSE_TRIM_IFSSPACE}
  138 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  139 
  140 n_CMD_ARG_DESC_SUBCLASS_DEF(pipe, 1, a_ctab_cad_pipe){
  141    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
  142       n_SHEXP_PARSE_TRIM_IFSSPACE}
  143 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  144 
  145 n_CMD_ARG_DESC_SUBCLASS_DEF(readctl, 2, a_ctab_cad_readctl){
  146    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION | n_CMD_ARG_DESC_HONOUR_STOP,
  147       n_SHEXP_PARSE_TRIM_IFSSPACE}, /* subcommand */
  148    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION |
  149          n_CMD_ARG_DESC_GREEDY | n_CMD_ARG_DESC_GREEDY_JOIN |
  150          n_CMD_ARG_DESC_HONOUR_STOP,
  151       n_SHEXP_PARSE_IGNORE_EMPTY | n_SHEXP_PARSE_TRIM_IFSSPACE} /* var names */
  152 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  153 
  154 n_CMD_ARG_DESC_SUBCLASS_DEF(resend, 1, a_ctab_cad_resend){
  155    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
  156       n_SHEXP_PARSE_TRIM_IFSSPACE}
  157 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  158 
  159 n_CMD_ARG_DESC_SUBCLASS_DEF(Resend, 1, a_ctab_cad_Resend){
  160    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
  161       n_SHEXP_PARSE_TRIM_IFSSPACE}
  162 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  163 
  164 n_CMD_ARG_DESC_SUBCLASS_DEF(save, 1, a_ctab_cad_save){
  165    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
  166       n_SHEXP_PARSE_TRIM_IFSSPACE}
  167 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  168 
  169 n_CMD_ARG_DESC_SUBCLASS_DEF(Save, 1, a_ctab_cad_Save){
  170    {n_CMD_ARG_DESC_MSGLIST | n_CMD_ARG_DESC_GREEDY,
  171       n_SHEXP_PARSE_TRIM_IFSSPACE}
  172 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  173 
  174 #ifdef HAVE_KEY_BINDINGS
  175 # define a_CTAB_CAD_UNBIND n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_unbind)
  176 n_CMD_ARG_DESC_SUBCLASS_DEF(unbind, 2, a_ctab_cad_unbind){
  177    {n_CMD_ARG_DESC_SHEXP, n_SHEXP_PARSE_TRIM_IFSSPACE}, /* context */
  178    /* key sequence or * */
  179    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_HONOUR_STOP, n_SHEXP_PARSE_DRYRUN}
  180 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  181 #else
  182 # define a_CTAB_CAD_UNBIND NULL
  183 #endif
  184 
  185 n_CMD_ARG_DESC_SUBCLASS_DEF(vpospar, 2, a_ctab_cad_vpospar){
  186    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_HONOUR_STOP,
  187       n_SHEXP_PARSE_TRIM_IFSSPACE}, /* subcommand */
  188    {n_CMD_ARG_DESC_SHEXP | n_CMD_ARG_DESC_OPTION |
  189          n_CMD_ARG_DESC_GREEDY | n_CMD_ARG_DESC_HONOUR_STOP,
  190       n_SHEXP_PARSE_IFS_VAR | n_SHEXP_PARSE_TRIM_IFSSPACE} /* args */
  191 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  192 
  193 n_CMD_ARG_DESC_SUBCLASS_DEF(write, 1, a_ctab_cad_write){
  194    {n_CMD_ARG_DESC_MSGLIST_AND_TARGET | n_CMD_ARG_DESC_GREEDY,
  195       n_SHEXP_PARSE_TRIM_IFSSPACE}
  196 }n_CMD_ARG_DESC_SUBCLASS_DEF_END;
  197 
  198 #else /* ifndef n_CMD_TAB_H */
  199 
  200 #ifdef HAVE_DOCSTRINGS
  201 # define DS(S) , S
  202 #else
  203 # define DS(S)
  204 #endif
  205 
  206 #undef MAC
  207 #define MAC (n_MAXARGC - 1)
  208 
  209 /* Some shorter aliases to be able to define a command in two lines */
  210 #define TMSGLST n_CMD_ARG_TYPE_MSGLIST
  211 #define TNDMLST n_CMD_ARG_TYPE_NDMLIST
  212 #define TRAWDAT n_CMD_ARG_TYPE_RAWDAT
  213 #  define TSTRING n_CMD_ARG_TYPE_STRING
  214 #define TWYSH n_CMD_ARG_TYPE_WYSH
  215 #  define TRAWLST n_CMD_ARG_TYPE_RAWLIST
  216 #  define TWYRA n_CMD_ARG_TYPE_WYRA
  217 #define TARG n_CMD_ARG_TYPE_ARG
  218 
  219 #define A n_CMD_ARG_A
  220 #define F n_CMD_ARG_F
  221 #define G n_CMD_ARG_G
  222 #define H n_CMD_ARG_H
  223 #define I n_CMD_ARG_I
  224 #define L n_CMD_ARG_L
  225 #define M n_CMD_ARG_M
  226 #define O n_CMD_ARG_O
  227 #define P n_CMD_ARG_P
  228 #define R n_CMD_ARG_R
  229 #define SC n_CMD_ARG_SC
  230 #define S n_CMD_ARG_S
  231 #define T n_CMD_ARG_T
  232 #define V n_CMD_ARG_V
  233 #define W n_CMD_ARG_W
  234 #define X n_CMD_ARG_X
  235 #define EM n_CMD_ARG_EM
  236 
  237    /* Note: the first command in here may NOT expand to an unsupported one!
  238     * It is used for n_cmd_default() */
  239    { "next", &c_next, (A | TNDMLST), 0, MMNDEL, NULL
  240      DS(N_("Goes to the next message (-list) and prints it")) },
  241 
  242 
  243    { "alias", &c_alias, (M | TWYRA), 0, MAC, NULL
  244      DS(N_("Show all (or <alias>), or (re)define <alias> to :<data>:")) },
  245    { "print", &c_type, (A | TMSGLST), 0, MMNDEL, NULL
  246      DS(N_("Type all messages of <msglist>, honouring `ignore' / `retain'")) },
  247    { "type", &c_type, (A | TMSGLST), 0, MMNDEL, NULL
  248      DS(N_("Type all messages of <msglist>, honouring `ignore' / `retain'")) },
  249    { "Type", &c_Type, (A | TMSGLST), 0, MMNDEL, NULL
  250      DS(N_("Like `type', but bypass `ignore' / `retain'")) },
  251    { "Print", &c_Type, (A | TMSGLST), 0, MMNDEL, NULL
  252      DS(N_("Like `print', but bypass `ignore' / `retain'")) },
  253    { "visual", &c_visual, (A | I | S | TMSGLST), 0, MMNORM, NULL
  254      DS(N_("Edit <msglist>")) },
  255    { "top", &c_top, (A | TMSGLST), 0, MMNDEL, NULL
  256      DS(N_("Type first *toplines* of all messages in <msglist>")) },
  257    { "Top", &c_Top, (A | TMSGLST), 0, MMNDEL, NULL
  258      DS(N_("Like `top', but bypass `ignore' / `retain'")) },
  259    { "touch", &c_stouch, (A | W | TMSGLST), 0, MMNDEL, NULL
  260      DS(N_("Mark <msglist> for saving in *mbox*")) },
  261    { "preserve", &c_preserve, (A | SC | W | TMSGLST), 0, MMNDEL, NULL
  262      DS(N_("Save <msglist> in system mailbox instead of *MBOX*")) },
  263    { "delete", &c_delete, (A | W | P | TMSGLST), 0, MMNDEL, NULL
  264      DS(N_("Delete <msglist>")) },
  265    { "dp", &c_deltype, (A | W | TMSGLST), 0, MMNDEL, NULL
  266      DS(N_("Delete the current message, then type the next")) },
  267    { "dt", &c_deltype, (A | W | TMSGLST), 0, MMNDEL, NULL
  268      DS(N_("Delete the current message, then type the next")) },
  269    { "undelete", &c_undelete, (A | P | TMSGLST), MDELETED, MMNDEL, NULL
  270      DS(N_("Un`delete' <msglist>")) },
  271    { "mail", &c_sendmail, (I | M | R | SC | EM | TSTRING), 0, 0, NULL
  272      DS(N_("Compose mail; recipients may be given as arguments")) },
  273    { "Mail", &c_Sendmail, (I | M | R | SC | EM | TSTRING), 0, 0, NULL
  274      DS(N_("Like `mail', but derive filename from first recipient")) },
  275    { "mbox", &c_mboxit, (A | W | TMSGLST), 0, MMNDEL, NULL
  276      DS(N_("Indicate that <msglist> is to be stored in *MBOX*")) },
  277    { "more", &c_more, (A | TMSGLST), 0, MMNDEL, NULL
  278      DS(N_("Invoke the pager on the given messages")) },
  279    { "page", &c_more, (A | TMSGLST), 0, MMNDEL, NULL
  280      DS(N_("Invoke the pager on the given messages")) },
  281    { "More", &c_More, (A | TMSGLST), 0, MMNDEL, NULL
  282      DS(N_("Invoke the pager on the given messages")) },
  283    { "Page", &c_More, (A | TMSGLST), 0, MMNDEL, NULL
  284      DS(N_("Invoke the pager on the given messages")) },
  285    { "unread", &c_unread, (A | TMSGLST), 0, MMNDEL, NULL
  286      DS(N_("Mark <msglist> as not being read")) },
  287    { "Unread", &c_unread, (A | TMSGLST), 0, MMNDEL, NULL
  288      DS(N_("Mark <msglist> as not being read")) },
  289    { "new", &c_unread, (A | TMSGLST), 0, MMNDEL, NULL
  290      DS(N_("Mark <msglist> as not being read")) },
  291    { "New", &c_unread, (A | TMSGLST), 0, MMNDEL, NULL
  292      DS(N_("Mark <msglist> as not being read")) },
  293    { n_em, &c_shell, (M | SC | V | X | EM | TRAWDAT), 0, 0, NULL
  294      DS(N_("Execute <shell-command>")) },
  295    { "copy", &c_copy, (A | M | TARG), 0, 0,
  296      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_copy)
  297      DS(N_("Copy [<msglist>], but do not mark them for deletion")) },
  298    { "Copy", &c_Copy, (A | M | SC | TARG), 0, 0,
  299      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Copy)
  300      DS(N_("Like `copy', but derive filename from first sender")) },
  301    { "chdir", &c_chdir, (M | TWYRA), 0, 1, NULL
  302      DS(N_("Change CWD to the specified/the login directory")) },
  303    { "cd", &c_chdir, (M | X | TWYRA), 0, 1, NULL
  304      DS(N_("Change working directory to the specified/the login directory")) },
  305    { "save", &c_save, (A | TARG), 0, 0,
  306      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_save)
  307      DS(N_("Append [<msglist>] to <file>")) },
  308    { "Save", &c_Save, (A | SC | TARG), 0, 0,
  309      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Save)
  310      DS(N_("Like `save', but derive filename from first sender")) },
  311    { "set", &c_set, (G | L | M | X | TWYRA), 0, MAC, NULL
  312      DS(N_("Print all variables, or set (a) <variable>(s)")) },
  313    { "unalias", &c_unalias, (M | TWYRA), 1, MAC, NULL
  314      DS(N_("Un`alias' <name-list> (* for all)")) },
  315    { "write", &c_write, (A | TARG), 0, 0,
  316      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_write)
  317      DS(N_("Write (append) [<msglist>] to [<file>]")) },
  318    { "from", &c_from, (A | TMSGLST), 0, MMNORM, NULL
  319      DS(N_("Type (matching) headers of <msglist> (a search specification)")) },
  320    { "search", &c_from, (A | TMSGLST), 0, MMNORM, NULL
  321      DS(N_("Search for <msglist>, type matching headers")) },
  322    { "file", &c_file, (M | T | TWYRA), 0, 1, NULL
  323      DS(N_("Open a new <mailbox> or show the current one")) },
  324    { "followup", &c_followup, (A | I | R | SC | TMSGLST), 0, MMNDEL, NULL
  325      DS(N_("Like `reply', but derive filename from first sender")) },
  326    { "followupall", &c_followupall, (A | I | R | SC | TMSGLST), 0, MMNDEL, NULL
  327      DS(N_("Like `reply', but derive filename from first sender")) },
  328    { "followupsender", &c_followupsender, (A | I | R | SC | TMSGLST),
  329       0, MMNDEL, NULL
  330      DS(N_("Like `Followup', but always reply to the sender only")) },
  331    { "folder", &c_file, (M | T | TWYRA), 0, 1, NULL
  332      DS(N_("Open a new <mailbox> or show the current one")) },
  333    { "folders", &c_folders, (M | T | TWYRA), 0, 1, NULL
  334      DS(N_("List mailboxes below the given or the global folder")) },
  335    { "headers", &c_headers, (A | M | TMSGLST), 0, MMNDEL, NULL
  336      DS(N_("Type a page of headers (with the first of <msglist> if given)")) },
  337    { "help", &a_ctab_c_help, (M | X | TWYSH), 0, 1, NULL
  338      DS(N_("Show help [[Option] for the given command]]")) },
  339    { n_qm, &a_ctab_c_help, (M | X | TWYSH), 0, 1, NULL
  340      DS(N_("Show help [[Option] for the given command]]")) },
  341    { "Reply", &c_Reply, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  342      DS(N_("Reply to originator, exclusively")) },
  343    { "Respond", &c_Reply, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  344      DS(N_("Reply to originator, exclusively")) },
  345    { "Followup", &c_Followup, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  346      DS(N_("Like `Reply', but derive filename from first sender")) },
  347    { "reply", &c_reply, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  348      DS(N_("Reply to originator and recipients of <msglist>")) },
  349    { "replyall", &c_replyall, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  350      DS(N_("Reply to originator and recipients of <msglist>")) },
  351    { "replysender", &c_replysender, (A | I | R | SC | EM | TMSGLST),
  352          0, MMNDEL, NULL
  353      DS(N_("Reply to originator, exclusively")) },
  354    { "respond", &c_reply, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  355      DS(N_("Reply to originators and recipients of <msglist>")) },
  356    { "respondall", &c_replyall, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  357      DS(N_("Reply to originators and recipients of <msglist>")) },
  358    { "respondsender", &c_replysender, (A | I | R | SC | EM | TMSGLST),
  359          0, MMNDEL, NULL
  360      DS(N_("Reply to originator, exclusively")) },
  361    { "resend", &c_resend, (A | R | SC | EM | TARG), 0, MMNDEL,
  362      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_resend)
  363      DS(N_("Resend <msglist> to <user>, add Resent-* header lines")) },
  364    { "Resend", &c_Resend, (A | R | SC | EM | TARG), 0, MMNDEL,
  365      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Resend)
  366      DS(N_("Like `resend', but do not add Resent-* header lines")) },
  367    { "forward", &c_forward, (A | R | SC | EM | TARG), 0, MMNDEL,
  368      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_forward)
  369      DS(N_("Forward <message> to <address>")) },
  370    { "Forward", &c_Forward, (A | R | SC | EM | TARG), 0, MMNDEL,
  371      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Forward)
  372      DS(N_("Like `forward', but derive filename from <address>")) },
  373    { "edit", &c_editor, (G | A | I | S | TMSGLST), 0, MMNORM, NULL
  374      DS(N_("Edit <msglist>")) },
  375    { "pipe", &c_pipe, (A | TARG), 0, MMNDEL,
  376      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_pipe)
  377      DS(N_("Pipe [<msglist>] to [<command>], honour `ignore' / `retain'")) },
  378    { "|", &c_pipe, (A | TARG), 0, MMNDEL,
  379      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_pipe)
  380      DS(N_("Pipe [<msglist>] to [<command>], honour `ignore' / `retain'")) },
  381    { "Pipe", &c_Pipe, (A | TARG), 0, MMNDEL,
  382      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_pipe)
  383      DS(N_("Like `pipe', but do not honour `ignore' / `retain'")) },
  384    { "size", &c_messize, (A | TMSGLST), 0, MMNDEL, NULL
  385      DS(N_("Show size in bytes for <msglist>")) },
  386    { "hold", &c_preserve, (A | SC | W | TMSGLST), 0, MMNDEL, NULL
  387      DS(N_("Save <msglist> in system mailbox instead of *MBOX*")) },
  388    { "if", &c_if, (G | F | M | X | TRAWLST), 1, MAC, NULL
  389      DS(N_("Part of the if/elif/else/endif statement")) },
  390    { "else", &c_else, (G | F | M | X | TWYSH), 0, 0, NULL
  391      DS(N_("Part of the if/elif/else/endif statement")) },
  392    { "elif", &c_elif, (G | F | M | X | TRAWLST), 1, MAC, NULL
  393      DS(N_("Part of the if/elif/else/endif statement")) },
  394    { "endif", &c_endif, (G | F | M | X | TWYSH), 0, 0, NULL
  395      DS(N_("Part of the if/elif/else/endif statement")) },
  396    { "alternates", &c_alternates, (M | V | TWYSH), 0, MAC, NULL
  397      DS(N_("Show or define alternate <address-list> for the invoking user")) },
  398    { "unalternates", &c_unalternates, (M | TWYSH), 1, MAC, NULL
  399      DS(N_("Delete alternate <address-list> (* for all)")) },
  400    { "ignore", &c_ignore, (M | TWYRA), 0, MAC, NULL
  401      DS(N_("Add <header-list> to the ignored LIST, or show that list")) },
  402    { "discard", &c_ignore, (M | TWYRA), 0, MAC, NULL
  403      DS(N_("Add <header-list> to the ignored LIST, or show that list")) },
  404    { "retain", &c_retain, (M | TWYRA), 0, MAC, NULL
  405      DS(N_("Add <header-list> to retained list, or show that list")) },
  406    { "saveignore", &c_saveignore, (O | M | TRAWLST), 0, MAC, NULL
  407      DS(N_("Obsoleted by `headerpick'")) },
  408    { "savediscard", &c_saveignore, (O | M | TRAWLST), 0, MAC, NULL
  409      DS(N_("Obsoleted by `headerpick'")) },
  410    { "saveretain", &c_saveretain, (O | M | TRAWLST), 0, MAC, NULL
  411      DS(N_("Obsoleted by `headerpick'")) },
  412    { "unignore", &c_unignore, (M | TWYRA), 0, MAC, NULL
  413      DS(N_("Un`ignore' <header-list>")) },
  414    { "unretain", &c_unretain, (M | TWYRA), 0, MAC, NULL
  415      DS(N_("Un`retain' <header-list>")) },
  416    { "unsaveignore", &c_unsaveignore, (O | M | TRAWLST), 0, MAC, NULL
  417      DS(N_("Obsoleted by `unheaderpick'")) },
  418    { "unsaveretain", &c_unsaveretain, (O | M | TRAWLST), 0, MAC, NULL
  419      DS(N_("Obsoleted by `unheaderpick'")) },
  420    { "newmail", &c_newmail, (A | T | TWYSH), 0, 0, NULL
  421      DS(N_("Check for new mail in current folder")) },
  422    { "shortcut", &c_shortcut, (M | TWYRA), 0, MAC, NULL
  423      DS(N_("Define <shortcut>s and their <expansion>, or list shortcuts")) },
  424    { "unshortcut", &c_unshortcut, (M | TWYRA), 1, MAC, NULL
  425      DS(N_("Delete <shortcut-list> (* for all)")) },
  426    { "thread", &c_thread, (O | A | TMSGLST), 0, 0, NULL
  427      DS(N_("Obsoleted by `sort' \"thread\"")) },
  428    { "unthread", &c_unthread, (O | A | TMSGLST), 0, 0, NULL
  429      DS(N_("Obsolete (use `unsort')")) },
  430    { "sort", &c_sort, (A | TWYSH), 0, 1, NULL
  431      DS(N_("Change sorting to: date,from,size,spam,status,subject,thread,to"))},
  432    { "unsort", &c_unthread, (A | TMSGLST), 0, 0, NULL
  433      DS(N_("Disable sorted or threaded mode")) },
  434    { "flag", &c_flag, (A | M | TMSGLST), 0, 0, NULL
  435      DS(N_("(Un)Flag <msglist> (for special attention)")) },
  436    { "unflag", &c_unflag, (A | M | TMSGLST), 0, 0, NULL
  437      DS(N_("(Un)Flag <msglist> (for special attention)")) },
  438    { "answered", &c_answered, (A | M | TMSGLST), 0, 0, NULL
  439      DS(N_("Mark the given <msglist> as answered")) },
  440    { "unanswered", &c_unanswered, (A | M | TMSGLST), 0, 0, NULL
  441      DS(N_("Un`answered' <msglist>")) },
  442    { "draft", &c_draft, (A | M | TMSGLST), 0, 0, NULL
  443      DS(N_("Mark <msglist> as draft")) },
  444    { "undraft", &c_undraft, (A | M | TMSGLST), 0, 0, NULL
  445      DS(N_("Un`draft' <msglist>")) },
  446    { "move", &c_move, (A | M | TARG), 0, 0,
  447      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_move)
  448      DS(N_("Like `copy', but mark messages for deletion")) },
  449    { "Move", &c_Move, (A | M | SC | TARG), 0, 0,
  450      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Move)
  451      DS(N_("Like `move', but derive filename from first sender")) },
  452    { "mv", &c_move, (O | A | M | TARG), 0, 0,
  453      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_move)
  454      DS(N_("Like `copy', but mark messages for deletion")) },
  455    { "Mv", &c_Move, (O | A | M | SC | TARG), 0, 0,
  456      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Move)
  457      DS(N_("Like `move', but derive filename from first sender")) },
  458    { "noop", &c_noop, (A | M | TWYSH), 0, 0, NULL
  459      DS(N_("NOOP command if current `file' is accessed via network")) },
  460    { "collapse", &c_collapse, (A | TMSGLST), 0, 0, NULL
  461      DS(N_("Collapse thread views for <msglist>")) },
  462    { "uncollapse", &c_uncollapse, (A | TMSGLST), 0, 0, NULL
  463      DS(N_("Uncollapse <msglist> if in threaded view")) },
  464    { "verify",
  465 #ifdef HAVE_XTLS
  466       &c_verify,
  467 #else
  468       NULL,
  469 #endif
  470       (A | TMSGLST), 0, 0, NULL
  471      DS(N_("Verify <msglist>")) },
  472    { "decrypt", &c_decrypt, (A | M | TARG), 0, 0,
  473      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_decrypt)
  474      DS(N_("Like `copy', but decrypt first, if encrypted")) },
  475    { "Decrypt", &c_Decrypt, (A | M | SC | TARG), 0, 0,
  476      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_Decrypt)
  477      DS(N_("Like `decrypt', but derive filename from first sender")) },
  478    { "certsave",
  479 #ifdef HAVE_TLS
  480       &c_certsave,
  481 #else
  482       NULL,
  483 #endif
  484       (A | TARG), 0, MMNDEL, a_CTAB_CAD_CERTSAVE
  485      DS(N_("Save S/MIME certificates of [<msglist>] to <file>")) },
  486    { "rename", &c_rename, (M | TWYRA), 0, 2, NULL
  487      DS(N_("Rename <existing-folder> to <new-folder>")) },
  488    { "remove", &c_remove, (M | TWYRA), 0, MAC, NULL
  489      DS(N_("Remove the named folders")) },
  490    { "show", &c_show, (A | TMSGLST), 0, MMNDEL, NULL
  491      DS(N_("Like `type', but show raw message content of <msglist>")) },
  492    { "Show", &c_show, (A | TMSGLST), 0, MMNDEL, NULL
  493      DS(N_("Like `Type', but show raw message content of <msglist>")) },
  494    { "mimeview", &c_mimeview, (A | I | EM | TMSGLST), 0, MMNDEL, NULL
  495      DS(N_("Show non-text parts of the given <message>")) },
  496    { "seen", &c_seen, (A | M | TMSGLST), 0, MMNDEL, NULL
  497      DS(N_("Mark <msglist> as seen")) },
  498    { "Seen", &c_seen, (A | M | TMSGLST), 0, MMNDEL, NULL
  499      DS(N_("Mark <msglist> as seen")) },
  500    { "fwdignore", &c_fwdignore, (O | M | TRAWLST), 0, MAC, NULL
  501      DS(N_("Obsoleted by `headerpick'")) },
  502    { "fwddiscard", &c_fwdignore, (O | M | TRAWLST), 0, MAC, NULL
  503      DS(N_("Obsoleted by `headerpick'")) },
  504    { "fwdretain", &c_fwdretain, (O | M | TRAWLST), 0, MAC, NULL
  505      DS(N_("Obsoleted by `headerpick'")) },
  506    { "unfwdignore", &c_unfwdignore, (O | M | TRAWLST), 0, MAC, NULL
  507      DS(N_("Obsoleted by `unheaderpick'")) },
  508    { "unfwdretain", &c_unfwdretain, (O | M | TRAWLST), 0, MAC, NULL
  509      DS(N_("Obsoleted by `unheaderpick'")) },
  510    { "mimetype", &c_mimetype, (M | TWYRA), 0, MAC, NULL
  511      DS(N_("(Load and) show all known MIME types, or define some")) },
  512    { "unmimetype", &c_unmimetype, (M | TWYRA), 1, MAC, NULL
  513      DS(N_("Delete <type>s (reset, * for all; former reinitializes)")) },
  514 
  515    { "spamclear",
  516 #ifdef HAVE_SPAM
  517       &c_spam_clear,
  518 #else
  519       NULL,
  520 #endif
  521       (A | M | TMSGLST), 0, MMNDEL, NULL
  522      DS(N_("Clear the spam flag for each message in <msglist>")) },
  523    { "spamset",
  524 #ifdef HAVE_SPAM
  525       &c_spam_set,
  526 #else
  527       NULL,
  528 #endif
  529       (A | M | TMSGLST), 0, MMNDEL, NULL
  530      DS(N_("Set the spam flag for each message in <msglist>")) },
  531    { "spamforget",
  532 #ifdef HAVE_SPAM
  533       &c_spam_forget,
  534 #else
  535       NULL,
  536 #endif
  537       (A | M | TMSGLST), 0, MMNDEL, NULL
  538      DS(N_("Force the spam detector to unlearn <msglist>")) },
  539    { "spamham",
  540 #ifdef HAVE_SPAM
  541       &c_spam_ham,
  542 #else
  543       NULL,
  544 #endif
  545       (A | M | TMSGLST), 0, MMNDEL, NULL
  546      DS(N_("Teach the spam detector that <msglist> is ham")) },
  547    { "spamrate",
  548 #ifdef HAVE_SPAM
  549       &c_spam_rate,
  550 #else
  551       NULL,
  552 #endif
  553       (A | M | TMSGLST), 0, MMNDEL, NULL
  554      DS(N_("Rate <msglist> via the spam detector")) },
  555    { "spamspam",
  556 #ifdef HAVE_SPAM
  557       &c_spam_spam,
  558 #else
  559       NULL,
  560 #endif
  561       (A | M | TMSGLST), 0, MMNDEL, NULL
  562      DS(N_("Teach the spam detector that <msglist> is spam")) },
  563 
  564    { "File", &c_File, (M | T | TWYRA), 0, 1, NULL
  565      DS(N_("Open a new mailbox readonly, or show the current mailbox")) },
  566    { "Folder", &c_File, (M | T | TWYRA), 0, 1, NULL
  567      DS(N_("Open a new mailbox readonly, or show the current mailbox")) },
  568    { "mlist", &c_mlist, (M | TWYRA), 0, MAC, NULL
  569      DS(N_("Show all known mailing lists or define some")) },
  570    { "unmlist", &c_unmlist, (M | TWYRA), 1, MAC, NULL
  571      DS(N_("Un`mlist' <name-list> (* for all)")) },
  572    { "mlsubscribe", &c_mlsubscribe, (M | TWYRA), 0, MAC, NULL
  573      DS(N_("Show all mailing list subscriptions or define some")) },
  574    { "unmlsubscribe", &c_unmlsubscribe, (M | TWYRA), 1, MAC, NULL
  575      DS(N_("Un`mlsubscribe' <name-list> (* for all)"))},
  576    { "Lreply", &c_Lreply, (A | I | R | SC | EM | TMSGLST), 0, MMNDEL, NULL
  577      DS(N_("Mailing-list reply to the given <msglist>")) },
  578    { "dotmove", &c_dotmove, (A | TSTRING), 1, 1, NULL
  579      DS(N_("Move the dot up <-> or down <+> by one")) },
  580 
  581    /* New-style commands without un* counterpart */
  582 
  583    { "=", &c_pdot, (A | G | V | X | EM | TARG), 0, MMNDEL,
  584      n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_pdot)
  585      DS(N_("Show message number of [<msglist>] (or the \"dot\")")) },
  586 
  587    { "call", &c_call, (M | X | EM | TARG), 0, 0,
  588       n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_call)
  589      DS(N_("Call macro <name> [:<arg>:]")) },
  590    { "call_if", &c_call_if, (M | X | EM | TARG), 0, 0,
  591       n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_call)
  592      DS(N_("Call macro <name> like `call', but be silent if non-existent")) },
  593    { "cwd", &c_cwd, (M | V | X | TWYSH), 0, 0, NULL
  594      DS(N_("Print current working directory (CWD)")) },
  595 
  596    { "digmsg", &c_digmsg, (G | M | X | EM | TARG), 0, 0,
  597       n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_digmsg)
  598      DS(N_("<create|remove> <-|msgno> | <-|msgno> <cmd>: "
  599          "message dig object control"))},
  600 
  601    { "echo", &c_echo, (G | M | V | X | EM | TWYSH), 0, MAC, NULL
  602      DS(N_("Echo arguments, and a trailing newline, to standard output")) },
  603    { "echoerr", &c_echoerr, (G | M | V | X | EM | TWYSH), 0, MAC, NULL
  604      DS(N_("Echo arguments, and a trailing newline, to standard error")) },
  605    { "echon", &c_echon, (G | M | V | X | EM | TWYSH), 0, MAC, NULL
  606      DS(N_("Echo arguments, without a trailing newline, to standard output")) },
  607    { "echoerrn", &c_echoerrn, (G | M | V| X | EM | TWYSH), 0, MAC, NULL
  608      DS(N_("Echo arguments, without a trailing newline, to standard error")) },
  609    { "environ", &c_environ, (G | M | X | TWYSH), 2, MAC, NULL
  610      DS(N_("<link|set|unset> (an) environment <variable>(s)")) },
  611    { "errors",
  612 #ifdef HAVE_ERRORS
  613       &c_errors,
  614 #else
  615       NULL,
  616 #endif
  617       (H | I | M | TWYSH), 0, 1, NULL
  618      DS(N_("Either [<show>] or <clear> the error message ring")) },
  619    { "eval", &c_eval, (G | M | X | EM | TWYSH), 1, MAC, NULL
  620      DS(N_("Construct command from :<arguments>:, reuse its $? and $!")) },
  621    { "exit", &c_exit, (M | X | TWYSH), 0, 1, NULL
  622      DS(N_("Immediately return [<status>] to the shell without saving")) },
  623 
  624    { "history",
  625 #ifdef HAVE_HISTORY
  626       &c_history,
  627 #else
  628       NULL,
  629 #endif
  630       (H | I | M | TWYSH), 0, 1, NULL
  631      DS(N_("<show (default)|load|save|clear> or select history <NO>")) },
  632 
  633    { "list", &a_ctab_c_list, (M | TWYSH), 0, 1, NULL
  634      DS(N_("List all commands (with argument: in prefix search order)")) },
  635    { "localopts", &c_localopts, (H | M | X | TWYSH), 1, 2, NULL
  636      DS(N_("Localize variable modifications? [<attribute>] <boolean>"))},
  637 
  638    { "netrc",
  639 #ifdef HAVE_NETRC
  640       &c_netrc,
  641 #else
  642       NULL,
  643 #endif
  644       (M | TWYSH), 0, 1, NULL
  645      DS(N_("[<show>], <load> or <clear> the .netrc cache")) },
  646 
  647    { "quit", &c_quit, TWYSH, 0, 1, NULL
  648      DS(N_("Exit session with [<status>], saving messages as necessary")) },
  649 
  650    { "read", &c_read, (G | M | X | EM | TWYSH), 1, MAC, NULL
  651      DS(N_("Read a line from standard input into <variable>(s)")) },
  652    { "readall", &c_readall, (G | M | X | EM | TWYSH), 1, 1, NULL
  653      DS(N_("Read anything from standard input until EOF into <variable>")) },
  654    { "readctl", &c_readctl, (G | M | X | EM | TARG), 0, 0,
  655       n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_readctl)
  656      DS(N_("[<show>] or <create|set|remove> <spec> read channels"))},
  657    { "return", &c_return, (M | X | EM | TWYSH), 0, 2, NULL
  658      DS(N_("Return control [with <return value> [<exit status>]] from macro"))},
  659 
  660    { "shell", &c_dosh, (I | S | EM | TWYSH), 0, 0, NULL
  661      DS(N_("Invoke an interactive shell")) },
  662    { "shift", &c_shift, (M | X | TWYSH), 0, 1, NULL
  663      DS(N_("In a `call'ed macro, shift positional parameters")) },
  664    { "sleep", &c_sleep, (H | M | X | EM | TWYSH), 1, 3, NULL
  665      DS(N_("Sleep for <seconds> [<milliseconds>]"))},
  666    { "source", &c_source, (M | TWYSH), 1, 1, NULL
  667      DS(N_("Read commands from <file>")) },
  668    { "source_if", &c_source_if, (M | TWYSH), 1, 1, NULL
  669      DS(N_("If <file> can be opened successfully, read commands from it")) },
  670 
  671    { "unset", &c_unset, (G | L | M | X | TWYSH), 1, MAC, NULL
  672      DS(N_("Unset <option-list>")) },
  673 
  674    { "varshow", &c_varshow, (G | M | X | TWYSH), 1, MAC, NULL
  675      DS(N_("Show some information about the given <variables>")) },
  676    { "varedit", &c_varedit, (O | G | I | M | S | TWYSH), 1, MAC, NULL
  677      DS(N_("Edit the value(s) of (an) variable(s), or create them")) },
  678    { "vexpr", &c_vexpr, (G | M | V | X | EM | TWYSH), 2, MAC, NULL
  679      DS(N_("Evaluate according to <operator> any :<arguments>:")) },
  680    { "vpospar", &c_vpospar, (G | M | V | X | EM | TARG), 0, 0,
  681       n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_vpospar)
  682      DS(N_("Positional parameters: <clear>, <quote>, or <set> from :<arg>:"))},
  683 
  684    { "version", &c_version, (H | M | V | X | TWYSH), 0, 0, NULL
  685      DS(N_("Show the version and feature set of the program")) },
  686 
  687    { "xit"/*POSIX, first!*/, &c_exit, (M | X | TWYSH), 0, 1, NULL
  688      DS(N_("Immediately return [<status>] to the shell without saving")) },
  689    { "xcall", &c_xcall, (M | X | EM | TARG), 0, 0,
  690       n_CMD_ARG_DESC_SUBCLASS_CAST(&a_ctab_cad_call)
  691      DS(N_("Replace currently executing macro with macro <name> [:<arg>:]")) },
  692 
  693    { "z", &c_scroll, (A | M | TWYSH), 0, 1, NULL
  694      DS(N_("Scroll header display as indicated by the argument (0,-,+,$)")) },
  695    { "Z", &c_Scroll, (A | M | TWYSH), 0, 1, NULL
  696      DS(N_("Like `z', but continues to the next flagged message")) },
  697 
  698    /* New-style commands with un* counterpart */
  699 
  700    { "account", &c_account, (M | TWYSH), 0, MAC, NULL
  701      DS(N_("Create or select <account>, or list all accounts")) },
  702    { "unaccount", &c_unaccount, (M | TWYSH), 1, MAC, NULL
  703      DS(N_("Delete all given <accounts> (* for all)")) },
  704 
  705    { "bind",
  706 #ifdef HAVE_KEY_BINDINGS
  707       &c_bind,
  708 #else
  709       NULL,
  710 #endif
  711       (M | TARG), 1, MAC, a_CTAB_CAD_BIND
  712      DS(N_("For <context> (base), [<show>] or bind <key[:,key:]> [:<data>:]"))},
  713    { "unbind",
  714 #ifdef HAVE_KEY_BINDINGS
  715       &c_unbind,
  716 #else
  717       NULL,
  718 #endif
  719       (M | TARG), 2, 2, a_CTAB_CAD_UNBIND
  720      DS(N_("Un`bind' <context> <key[:,key:]> (* for all)")) },
  721 
  722    { "charsetalias", &c_charsetalias, (M | TWYSH), 0, MAC, NULL
  723      DS(N_("Define [:<charset> <charset-alias>:]s, or list mappings")) },
  724    { "uncharsetalias", &c_uncharsetalias, (M | TWYSH), 1, MAC, NULL
  725      DS(N_("Delete <charset-mapping-list> (* for all)")) },
  726 
  727    { "colour",
  728 #ifdef HAVE_COLOUR
  729       &c_colour,
  730 #else
  731       NULL,
  732 #endif
  733       (M | TWYSH), 1, 4, NULL
  734      DS(N_("Show colour settings of <type> (1,8,256,all/*) or define one")) },
  735    { "uncolour",
  736 #ifdef HAVE_COLOUR
  737       &c_uncolour,
  738 #else
  739       NULL,
  740 #endif
  741       (M | TWYSH), 2, 3, NULL
  742      DS(N_("Un`colour' <type> <mapping> (* for all) [<precondition>]")) },
  743 
  744    { "commandalias", &c_commandalias, (M | X | TWYSH), 0, MAC, NULL
  745      DS(N_("Print/create command <alias> [<command>], or list all aliases")) },
  746    { "uncommandalias", &c_uncommandalias, (M | X | TWYSH), 1, MAC, NULL
  747      DS(N_("Delete <command-alias-list> (* for all)")) },
  748       { "ghost", &c_commandalias, (O | M | X | TWYRA), 0, MAC, NULL
  749         DS(N_("Obsoleted by `commandalias'")) },
  750       { "unghost", &c_uncommandalias, (O | M | X | TWYRA), 1, MAC, NULL
  751         DS(N_("Obsoleted by `uncommandalias'")) },
  752 
  753    { "define", &c_define, (M | X | TWYSH), 0, 2, NULL
  754      DS(N_("Define a <macro> or show the currently defined ones")) },
  755    { "undefine", &c_undefine, (M | X | TWYSH), 1, MAC, NULL
  756      DS(N_("Un`define' all given <macros> (* for all)")) },
  757 
  758    { "filetype", &c_filetype, (M | TWYSH), 0, MAC, NULL
  759      DS(N_("Create [:<extension> <load-cmd> <save-cmd>:] "
  760       "or list file handlers"))},
  761    { "unfiletype", &c_unfiletype, (M | TWYSH), 1, MAC, NULL
  762      DS(N_("Delete file handler for [:<extension>:] (* for all)")) },
  763 
  764    { "headerpick", &c_headerpick, (M | TWYSH), 0, MAC, NULL
  765      DS(N_("Header selection: [<context> [<type> [<header-list>]]]"))},
  766    { "unheaderpick", &c_unheaderpick, (M | TWYSH), 3, MAC, NULL
  767      DS(N_("Header deselection: <context> <type> <header-list>"))},
  768 
  769    { "tls",
  770 #ifdef HAVE_TLS
  771       &c_tls,
  772 #else
  773       NULL,
  774 #endif
  775       (G | V | EM | TWYSH), 1, MAC, NULL
  776      DS(N_("TLS information and management: <command> [<:argument:>]")) },
  777 
  778    /* Codec commands */
  779 
  780    { "addrcodec", &c_addrcodec, (G | M | V | X | EM | TRAWDAT), 0, 0, NULL
  781     DS(N_("Email address <[+[+[+]]]e[ncode]|d[ecode]|s[kin]> <rest-of-line>"))},
  782 
  783    { "shcodec", &c_shcodec, (G | M | V | X | EM | TRAWDAT), 0, 0, NULL
  784      DS(N_("Shell quoting: <[+]e[ncode]|d[ecode]> <rest-of-line>")) },
  785 
  786    { "urlcodec", &c_urlcodec, (G | M | V | X | EM | TRAWDAT), 0, 0, NULL
  787      DS(N_("URL percent <[path]e[ncode]|[path]d[ecode]> <rest-of-line>")) },
  788       { "urlencode", &c_urlencode, (O | G | M | X | TWYRA), 1, MAC, NULL
  789         DS(N_("Obsoleted by `urlcodec'")) },
  790       { "urldecode", &c_urldecode, (O | G | M | X | TWYRA), 1, MAC, NULL
  791         DS(N_("Obsoleted by `urlcodec'")) }
  792 
  793 #ifdef HAVE_MEMORY_DEBUG
  794    ,{ "memtrace", &c_memtrace, (I | M | TWYSH), 0, 0, NULL
  795      DS(N_("Trace current memory usage afap")) }
  796 #endif
  797 #ifdef HAVE_DEVEL
  798    ,{ "sigstate", &c_sigstate, (I | M | TWYSH), 0, 0, NULL
  799      DS(N_("Show signal handler states")) }
  800 #endif
  801 
  802    /* Obsolete stuff */
  803 
  804 #ifdef HAVE_IMAP
  805    ,{ "imap", &c_imap_imap, (A | TSTRING), 0, MAC, NULL
  806      DS(N_("Send command strings directly to the IMAP server")) },
  807    { "connect", &c_connect, (A | TSTRING), 0, 0, NULL
  808      DS(N_("If disconnected, connect to IMAP mailbox")) },
  809    { "disconnect", &c_disconnect, (A | TNDMLST), 0, 0, NULL
  810      DS(N_("If connected, disconnect from IMAP mailbox")) },
  811    { "cache", &c_cache, (A | TMSGLST), 0, 0, NULL
  812      DS(N_("Read specified <message list> into the IMAP cache")) },
  813 
  814    { "imapcodec", &c_imapcodec, (G | M | V | X | TRAWDAT), 0, 0, NULL
  815      DS(N_("IMAP mailbox name <e[ncode]|d[ecode]> <rest-of-line>")) }
  816 #endif
  817 
  818 #undef DS
  819 
  820 #undef MAC
  821 
  822 #undef TMSGLST
  823 #undef TNDMLST
  824 #undef TRAWDAT
  825 #  undef TSTRING
  826 #undef TWYSH
  827 #  undef TRAWLST
  828 #  undef TWYRA
  829 #undef TARG
  830 
  831 #undef A
  832 #undef F
  833 #undef G
  834 #undef H
  835 #undef I
  836 #undef M
  837 #undef O
  838 #undef P
  839 #undef R
  840 #undef T
  841 #undef V
  842 #undef W
  843 #undef X
  844 #undef EM
  845 
  846 #endif /* n_CMD_TAB_H */
  847 
  848 /* s-it-mode */