summaryrefslogtreecommitdiffstats
path: root/init.h
diff options
context:
space:
mode:
authorThomas Roessler <roessler@does-not-exist.org>1998-06-08 09:16:03 +0000
committerThomas Roessler <roessler@does-not-exist.org>1998-06-08 09:16:03 +0000
commit1a5381e07e97fe482c2b3a7c75f99938f0b105d4 (patch)
treeb4fa4088bbbf5fc9217ee6f87ab60034175e6899 /init.h
Initial revision
Diffstat (limited to 'init.h')
-rw-r--r--init.h342
1 files changed, 342 insertions, 0 deletions
diff --git a/init.h b/init.h
new file mode 100644
index 00000000..40515718
--- /dev/null
+++ b/init.h
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 1996-8 Michael R. Elkins <me@cs.hmc.edu>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "sort.h"
+#include "buffy.h"
+
+#define DT_MASK 0x0f
+#define DT_BOOL 1 /* boolean option */
+#define DT_NUM 2 /* a number */
+#define DT_STR 3 /* a string */
+#define DT_PATH 4 /* a pathname */
+#define DT_QUAD 5 /* quad-option (yes/no/ask-yes/ask-no) */
+#define DT_SORT 6 /* sorting methods */
+#define DT_RX 7 /* regular expressions */
+#define DT_MAGIC 8 /* mailbox type */
+#define DT_SYN 9 /* synonym for another variable */
+
+#define DTYPE(x) ((x) & DT_MASK)
+
+/* subtypes */
+#define DT_SUBTYPE_MASK 0xf0
+#define DT_SORT_ALIAS 0x10
+#define DT_SORT_BROWSER 0x20
+
+/* flags to parse_set() */
+#define M_SET_INV (1<<0) /* default is to invert all vars */
+#define M_SET_UNSET (1<<1) /* default is to unset all vars */
+#define M_SET_RESET (1<<2) /* default is to reset all vars to default */
+
+/* forced redraw/resort types */
+#define R_NONE 0
+#define R_INDEX (1<<0)
+#define R_PAGER (1<<1)
+#define R_RESORT (1<<2) /* resort the mailbox */
+#define R_RESORT_SUB (1<<3) /* resort subthreads */
+#define R_BOTH (R_INDEX | R_PAGER)
+#define R_RESORT_BOTH (R_RESORT | R_RESORT_SUB)
+
+struct option_t
+{
+ char *option;
+ short type;
+ short flags;
+ unsigned long data;
+ unsigned long init; /* initial value */
+};
+
+#define UL (unsigned long)
+
+#ifndef ISPELL
+#define ISPELL "ispell"
+#endif
+
+struct option_t MuttVars[] = {
+ { "abort_nosubject", DT_QUAD, R_NONE, OPT_SUBJECT, M_ASKYES },
+ { "abort_unmodified", DT_QUAD, R_NONE, OPT_ABORT, M_YES },
+ { "alias_file", DT_PATH, R_NONE, UL &AliasFile, UL "~/.muttrc" },
+ { "alias_format", DT_STR, R_NONE, UL &AliasFmt, UL "%2n %t %-10a %r" },
+ { "allow_8bit", DT_BOOL, R_NONE, OPTALLOW8BIT, 1 },
+ { "alternates", DT_RX, R_BOTH, UL &Alternates, 0 },
+ { "arrow_cursor", DT_BOOL, R_BOTH, OPTARROWCURSOR, 0 },
+ { "ascii_chars", DT_BOOL, R_BOTH, OPTASCIICHARS, 0 },
+ { "askbcc", DT_BOOL, R_NONE, OPTASKBCC, 0 },
+ { "askcc", DT_BOOL, R_NONE, OPTASKCC, 0 },
+ { "attribution", DT_STR, R_NONE, UL &Attribution, UL "On %d, %n wrote:" },
+ { "autoedit", DT_BOOL, R_NONE, OPTAUTOEDIT, 0 },
+ { "auto_tag", DT_BOOL, R_NONE, OPTAUTOTAG, 0 },
+ { "beep", DT_BOOL, R_NONE, OPTBEEP, 1 },
+ { "beep_new", DT_BOOL, R_NONE, OPTBEEPNEW, 0 },
+ { "charset", DT_STR, R_NONE, UL &Charset, UL "iso-8859-1" },
+ { "check_new", DT_BOOL, R_NONE, OPTCHECKNEW, 1 },
+ { "confirmappend", DT_BOOL, R_NONE, OPTCONFIRMAPPEND, 1 },
+ { "confirmcreate", DT_BOOL, R_NONE, OPTCONFIRMCREATE, 1 },
+ { "copy", DT_QUAD, R_NONE, OPT_COPY, M_YES },
+ { "date_format", DT_STR, R_BOTH, UL &DateFmt, UL "!%a, %b %d, %Y at %I:%M:%S%p %Z" },
+ { "delete_format", DT_STR, R_NONE, UL &DeleteFmt, UL "[-- Attachment from %u deleted %<%b %d %T %Y> --]" },
+ { "default_hook", DT_STR, R_NONE, UL &DefaultHook, UL "~f %s !~P | (~P ~C %s)" },
+ { "delete", DT_QUAD, R_NONE, OPT_DELETE, M_ASKYES },
+ { "dsn_notify", DT_STR, R_NONE, UL &DsnNotify, UL "" },
+ { "dsn_return", DT_STR, R_NONE, UL &DsnReturn, UL "" },
+ { "edit_headers", DT_BOOL, R_NONE, OPTEDITHDRS, 0 },
+ { "edit_hdrs", DT_SYN, R_NONE, UL "edit_headers", 0 },
+ { "editor", DT_PATH, R_NONE, UL &Editor, 0 },
+ { "empty_to", DT_STR, R_NONE, UL &EmptyTo, UL "undisclosed-recipients" },
+ { "escape", DT_STR, R_NONE, UL &EscChar, UL "~" },
+ { "fast_reply", DT_BOOL, R_NONE, OPTFASTREPLY, 0 },
+ { "fcc_attach", DT_BOOL, R_NONE, OPTFCCATTACH, 1 },
+ { "folder", DT_PATH, R_NONE, UL &Maildir, UL "~/Mail" },
+ { "folder_format", DT_STR, R_NONE, UL &FolderFormat, UL "%N %F %2l %-8.8u %-8.8g %8s %d %f" },
+ { "followup_to", DT_BOOL, R_NONE, OPTFOLLOWUPTO, 1 },
+ { "force_name", DT_BOOL, R_NONE, OPTFORCENAME, 0 },
+ { "forward_decode", DT_BOOL, R_NONE, OPTFORWDECODE, 1 },
+ { "forw_decode", DT_SYN, R_NONE, UL "forward_decode", 0 },
+ { "forward_format", DT_STR, R_NONE, UL &ForwFmt, UL "[%a: %s]" },
+ { "forw_format", DT_SYN, R_NONE, UL "forward_format", 0 },
+ { "forward_quote", DT_BOOL, R_NONE, OPTFORWQUOTE, 0 },
+ { "forw_quote", DT_SYN, R_NONE, UL "forward_quote", 0 },
+ { "hdr_format", DT_SYN, R_NONE, UL "index_format", 0 },
+ { "hdrs", DT_BOOL, R_NONE, OPTHDRS, 1 },
+ { "header", DT_BOOL, R_NONE, OPTHEADER, 0 },
+ { "help", DT_BOOL, R_BOTH, OPTHELP, 1 },
+ { "history", DT_NUM, R_NONE, UL &HistSize, 10 },
+ { "hostname", DT_STR, R_NONE, UL &Fqdn, 0 },
+ { "in_reply_to", DT_STR, R_NONE, UL &InReplyTo, UL "%i; from %n on %{!%a, %b %d, %Y at %I:%M:%S%p %Z}" },
+ { "include", DT_QUAD, R_NONE, OPT_INCLUDE, M_ASKYES },
+ { "indent_string", DT_STR, R_NONE, UL &Prefix, UL "> " },
+ { "indent_str", DT_SYN, R_NONE, UL "indent_string", 0 },
+ { "index_format", DT_STR, R_BOTH, UL &HdrFmt, UL "%4C %Z %{%b %d} %-15.15L (%4l) %s" },
+ { "ignore_list_reply_to", DT_BOOL, R_NONE, OPTIGNORELISTREPLYTO, 0 },
+ { "ispell", DT_PATH, R_NONE, UL &Ispell, UL ISPELL },
+ { "locale", DT_STR, R_BOTH, UL &Locale, UL "C" },
+ { "mail_check", DT_NUM, R_NONE, UL &BuffyTimeout, 5 },
+ { "mailcap_path", DT_STR, R_NONE, UL &MailcapPath, 0 },
+ { "mark_old", DT_BOOL, R_BOTH, OPTMARKOLD, 1 },
+ { "markers", DT_BOOL, R_PAGER, OPTMARKERS, 1 },
+ { "mask", DT_RX, R_NONE, UL &Mask, UL "^(\\.\\.$|[^.])" },
+ { "mbox", DT_PATH, R_BOTH, UL &Inbox, UL "~/mbox" },
+ { "mbox_type", DT_MAGIC,R_NONE, UL &DefaultMagic, M_MBOX },
+ { "metoo", DT_BOOL, R_NONE, OPTMETOO, 0 },
+ { "menu_scroll", DT_BOOL, R_NONE, OPTMENUSCROLL, 0 },
+ { "meta_key", DT_BOOL, R_NONE, OPTMETAKEY, 0 },
+ { "mime_forward", DT_QUAD, R_NONE, OPT_MIMEFWD, 0 },
+ { "mime_forward_decode", DT_BOOL, R_NONE, OPTMIMEFORWDECODE, 0 },
+ { "mime_fwd", DT_SYN, R_NONE, UL "mime_forward", 0 },
+ { "move", DT_QUAD, R_NONE, OPT_MOVE, M_ASKNO },
+ { "message_format", DT_STR, R_NONE, UL &MsgFmt, UL "%s" },
+ { "msg_format", DT_SYN, R_NONE, UL "message_format", 0 },
+ { "pager", DT_PATH, R_NONE, UL &Pager, UL "builtin" },
+ { "pager_context", DT_NUM, R_NONE, UL &PagerContext, 0 },
+ { "pager_format", DT_STR, R_PAGER, UL &PagerFmt, UL "-%S- %C/%m: %-20.20n %s" },
+ { "pager_index_lines",DT_NUM, R_PAGER, UL &PagerIndexLines, 0 },
+ { "pager_stop", DT_BOOL, R_NONE, OPTPAGERSTOP, 0 },
+
+
+
+#ifdef _PGPPATH
+
+ { "pgp_autosign", DT_BOOL, R_NONE, OPTPGPAUTOSIGN, 0 },
+ { "pgp_autoencrypt", DT_BOOL, R_NONE, OPTPGPAUTOENCRYPT, 0 },
+ { "pgp_encryptself", DT_BOOL, R_NONE, OPTPGPENCRYPTSELF, 1 },
+ { "pgp_long_ids", DT_BOOL, R_NONE, OPTPGPLONGIDS, 0 },
+ { "pgp_replyencrypt", DT_BOOL, R_NONE, OPTPGPREPLYENCRYPT, 0 },
+ { "pgp_replysign", DT_BOOL, R_NONE, OPTPGPREPLYSIGN, 0 },
+ { "pgp_sign_as", DT_STR, R_NONE, UL &PgpSignAs, 0 },
+ { "pgp_sign_micalg", DT_STR, R_NONE, UL &PgpSignMicalg, UL "pgp-md5" },
+ { "pgp_strict_enc", DT_BOOL, R_NONE, OPTPGPSTRICTENC, 1 },
+ { "pgp_timeout", DT_NUM, R_NONE, UL &PgpTimeout, 300 },
+ { "pgp_verify_sig", DT_QUAD, R_NONE, OPT_VERIFYSIG, M_YES },
+
+ { "pgp_v2", DT_PATH, R_NONE, UL &PgpV2, 0 },
+ { "pgp_v2_language", DT_STR, R_NONE, UL &PgpV2Language, UL "en" },
+ { "pgp_v2_pubring", DT_PATH, R_NONE, UL &PgpV2Pubring, 0 },
+ { "pgp_v2_secring", DT_PATH, R_NONE, UL &PgpV2Secring, 0 },
+
+ { "pgp_v5", DT_PATH, R_NONE, UL &PgpV3, 0 },
+ { "pgp_v5_language", DT_STR, R_NONE, UL &PgpV3Language, 0 },
+ { "pgp_v5_pubring", DT_PATH, R_NONE, UL &PgpV3Pubring, 0 },
+ { "pgp_v5_secring", DT_PATH, R_NONE, UL &PgpV3Secring, 0 },
+
+# ifdef HAVE_PGP2
+ { "pgp_default_version", DT_STR, R_NONE, UL &PgpDefaultVersion, UL "pgp2" },
+# else
+# ifdef HAVE_PGP5
+ { "pgp_default_version", DT_STR, R_NONE, UL &PgpDefaultVersion, UL "pgp5" },
+# endif
+# endif
+ { "pgp_receive_version", DT_STR, R_NONE, UL &PgpReceiveVersion, UL "default" },
+ { "pgp_send_version", DT_STR, R_NONE, UL &PgpSendVersion, UL "default" },
+ { "pgp_key_version", DT_STR, R_NONE, UL &PgpKeyVersion, UL "default" },
+
+#endif /* _PGPPATH */
+
+
+
+ { "pipe_split", DT_BOOL, R_NONE, OPTPIPESPLIT, 0 },
+ { "pipe_decode", DT_BOOL, R_NONE, OPTPIPEDECODE, 0 },
+ { "pipe_sep", DT_STR, R_NONE, UL &PipeSep, UL "\n" },
+#ifdef USE_POP
+ { "pop_delete", DT_BOOL, R_NONE, OPTPOPDELETE, 0 },
+ { "pop_host", DT_STR, R_NONE, UL &PopHost, UL "" },
+ { "pop_port", DT_NUM, R_NONE, UL &PopPort, 110 },
+ { "pop_pass", DT_STR, R_NONE, UL &PopPass, UL "" },
+ { "pop_user", DT_STR, R_NONE, UL &PopUser, UL "" },
+#endif /* USE_POP */
+ { "post_indent_string",DT_STR, R_NONE, UL &PostIndentString, UL "" },
+ { "post_indent_str", DT_SYN, R_NONE, UL "post_indent_string", 0 },
+ { "postpone", DT_QUAD, R_NONE, OPT_POSTPONE, M_ASKYES },
+ { "postponed", DT_PATH, R_NONE, UL &Postponed, UL "~/postponed" },
+ { "print", DT_QUAD, R_NONE, OPT_PRINT, M_ASKNO },
+ { "print_command", DT_PATH, R_NONE, UL &PrintCmd, UL "lpr" },
+ { "print_cmd", DT_SYN, R_NONE, UL "print_command", 0 },
+ { "prompt_after", DT_BOOL, R_NONE, OPTPROMPTAFTER, 1 },
+ { "query_command", DT_PATH, R_NONE, UL &QueryCmd, UL "" },
+ { "quit", DT_QUAD, R_NONE, OPT_QUIT, M_YES },
+ { "quote_regexp", DT_RX, R_PAGER, UL &QuoteRegexp, UL "^([ \t]*[|>:}#])+" },
+ { "reply_regexp", DT_RX, R_INDEX|R_RESORT, UL &ReplyRegexp, UL "^(re([\\[0-9\\]+])*|aw):[ \t]*" },
+ { "read_inc", DT_NUM, R_NONE, UL &ReadInc, 10 },
+ { "read_only", DT_BOOL, R_NONE, OPTREADONLY, 0 },
+ { "realname", DT_STR, R_BOTH, UL &Realname, 0 },
+ { "recall", DT_QUAD, R_NONE, OPT_RECALL, M_ASKYES },
+ { "record", DT_PATH, R_NONE, UL &Outbox, UL "" },
+ { "reply_to", DT_QUAD, R_NONE, OPT_REPLYTO, M_ASKYES },
+ { "resolve", DT_BOOL, R_NONE, OPTRESOLVE, 1 },
+ { "reverse_alias", DT_BOOL, R_BOTH, OPTREVALIAS, 0 },
+ { "reverse_name", DT_BOOL, R_BOTH, OPTREVNAME, 0 },
+ { "save_address", DT_BOOL, R_NONE, OPTSAVEADDRESS, 0 },
+ { "save_empty", DT_BOOL, R_NONE, OPTSAVEEMPTY, 1 },
+ { "save_name", DT_BOOL, R_NONE, OPTSAVENAME, 0 },
+ { "sendmail", DT_PATH, R_NONE, UL &Sendmail, UL SENDMAIL " -oem -oi" },
+ { "sendmail_wait", DT_NUM, R_NONE, UL &SendmailWait, 0 },
+ { "shell", DT_PATH, R_NONE, UL &Shell, 0 },
+ { "sig_dashes", DT_BOOL, R_NONE, OPTSIGDASHES, 1 },
+ { "signature", DT_PATH, R_NONE, UL &Signature, UL "~/.signature" },
+ { "simple_search", DT_STR, R_NONE, UL &SimpleSearch, UL "~f %s | ~s %s" },
+ { "smart_wrap", DT_BOOL, R_PAGER, OPTWRAP, 1 },
+ { "sort", DT_SORT, R_INDEX|R_RESORT, UL &Sort, SORT_DATE },
+ { "sort_alias", DT_SORT|DT_SORT_ALIAS, R_NONE, UL &SortAlias, SORT_ALIAS },
+ { "sort_aux", DT_SORT, R_INDEX|R_RESORT_BOTH, UL &SortAux, SORT_DATE },
+ { "sort_browser", DT_SORT|DT_SORT_BROWSER, R_NONE, UL &BrowserSort, SORT_SUBJECT },
+ { "sort_re", DT_BOOL, R_INDEX|R_RESORT_BOTH, OPTSORTRE, 1 },
+ { "spoolfile", DT_PATH, R_NONE, UL &Spoolfile, 0 },
+ { "status_chars", DT_STR, R_BOTH, UL &StChars, UL "-*%" },
+ { "status_format", DT_STR, R_BOTH, UL &Status, UL "-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b?%?l? %l?]---(%s/%S)-%>-(%P)---" },
+ { "status_on_top", DT_BOOL, R_BOTH, OPTSTATUSONTOP, 0 },
+ { "strict_threads", DT_BOOL, R_RESORT|R_INDEX, OPTSTRICTTHREADS, 0 },
+ { "suspend", DT_BOOL, R_NONE, OPTSUSPEND, 1 },
+ { "thorough_search", DT_BOOL, R_NONE, OPTTHOROUGHSRC, 0 },
+ { "tilde", DT_BOOL, R_PAGER, OPTTILDE, 0 },
+ { "timeout", DT_NUM, R_NONE, UL &Timeout, 600 },
+ { "tmpdir", DT_PATH, R_NONE, UL &Tempdir, 0 },
+ { "to_chars", DT_STR, R_BOTH, UL &Tochars, UL " +TCF" },
+ { "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 },
+ { "use_domain", DT_BOOL, R_NONE, OPTUSEDOMAIN, 1 },
+ { "use_from", DT_BOOL, R_NONE, OPTUSEFROM, 1 },
+ { "use_mailcap", DT_QUAD, R_NONE, OPT_USEMAILCAP, 1 },
+ { "visual", DT_PATH, R_NONE, UL &Visual, 0 },
+ { "wait_key", DT_BOOL, R_NONE, OPTWAITKEY, 1 },
+ { "wrap_search", DT_BOOL, R_NONE, OPTWRAPSEARCH, 1 },
+ { "write_inc", DT_NUM, R_NONE, UL &WriteInc, 10 },
+ { NULL }
+};
+
+const struct mapping_t SortMethods[] = {
+ { "date", SORT_DATE },
+ { "date-sent", SORT_DATE },
+ { "date-received", SORT_RECEIVED },
+ { "mailbox-order", SORT_ORDER },
+ { "subject", SORT_SUBJECT },
+ { "from", SORT_FROM },
+ { "size", SORT_SIZE },
+ { "threads", SORT_THREADS },
+ { "to", SORT_TO },
+ { "score", SORT_SCORE },
+ { NULL, 0 }
+};
+
+const struct mapping_t SortBrowserMethods[] = {
+ { "alpha", SORT_SUBJECT },
+ { "date", SORT_DATE },
+ { "size", SORT_SIZE },
+ { "unsorted", SORT_ORDER },
+ { NULL }
+};
+
+const struct mapping_t SortAliasMethods[] = {
+ { "alias", SORT_ALIAS },
+ { "address", SORT_ADDRESS },
+ { "unsorted", SORT_ORDER },
+ { NULL }
+};
+
+/* functions used to parse commands in a rc file */
+
+static int parse_list (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unlist (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_alias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unalias (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_ignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unignore (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_source (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_set (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_my_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+static int parse_unmy_hdr (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+
+struct command_t
+{
+ char *name;
+ int (*func) (BUFFER *, BUFFER *, unsigned long, BUFFER *);
+ unsigned long data;
+};
+
+struct command_t Commands[] = {
+ { "alias", parse_alias, 0 },
+ { "auto_view", parse_list, UL &AutoViewList },
+ { "alternative_order", parse_list, UL &AlternativeOrderList},
+ { "bind", mutt_parse_bind, 0 },
+#ifdef HAVE_COLOR
+ { "color", mutt_parse_color, 0 },
+ { "uncolor", mutt_parse_uncolor, 0 },
+#endif
+ { "fcc-hook", mutt_parse_hook, M_FCCHOOK },
+ { "fcc-save-hook", mutt_parse_hook, M_FCCHOOK | M_SAVEHOOK },
+ { "folder-hook", mutt_parse_hook, M_FOLDERHOOK },
+ { "hdr_order", parse_list, UL &HeaderOrderList },
+ { "ignore", parse_ignore, 0 },
+ { "lists", parse_list, UL &MailLists },
+ { "macro", mutt_parse_macro, 0 },
+ { "mailboxes", mutt_parse_mailboxes, 0 },
+ { "mbox-hook", mutt_parse_hook, M_MBOXHOOK },
+ { "mono", mutt_parse_mono, 0 },
+ { "my_hdr", parse_my_hdr, 0 },
+ { "push", mutt_parse_push, 0 },
+ { "reset", parse_set, M_SET_RESET },
+ { "save-hook", mutt_parse_hook, M_SAVEHOOK },
+ { "score", mutt_parse_score, 0 },
+ { "send-hook", mutt_parse_hook, M_SENDHOOK },
+ { "set", parse_set, 0 },
+ { "source", parse_source, 0 },
+ { "toggle", parse_set, M_SET_INV },
+ { "unalias", parse_unalias, 0 },
+ { "unignore", parse_unignore, 0 },
+ { "unlists", parse_unlist, UL &MailLists },
+ { "unmy_hdr", parse_unmy_hdr, 0 },
+ { "unscore", mutt_parse_unscore, 0 },
+ { "unset", parse_set, M_SET_UNSET },
+ { NULL }
+};