📄 main.c
字号:
/* * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org> * Copyright (C) 1999-2002 Thomas Roessler <roessler@does-not-exist.org> * Copyright (C) 2004 g10 Code GmbH * * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define MAIN_C 1#if HAVE_CONFIG_H# include "config.h"#endif#include "mutt.h"#include "mutt_curses.h"#include "keymap.h"#include "mailbox.h"#include "url.h"#include "mutt_crypt.h"#include "mutt_idna.h"#ifdef USE_SASL#include "mutt_sasl.h"#endif#ifdef USE_IMAP#include "imap/imap.h"#endif#include <string.h>#include <stdlib.h>#include <locale.h>#include <unistd.h>#include <errno.h>#include <sys/stat.h>#include <sys/utsname.h>#ifdef HAVE_GETOPT_H#include <getopt.h>#endif#ifdef HAVE_LIBIDN#include <stringprep.h>#endifstatic const char *ReachingUs = N_("\To contact the developers, please mail to <mutt-dev@mutt.org>.\n\To report a bug, please visit http://bugs.mutt.org/.\n");static const char *Notice = N_("\Copyright (C) 1996-2006 Michael R. Elkins and others.\n\Mutt comes with ABSOLUTELY NO WARRANTY; for details type `mutt -vv'.\n\Mutt is free software, and you are welcome to redistribute it\n\under certain conditions; type `mutt -vv' for details.\n");static const char *Copyright = N_("\Copyright (C) 1996-2004 Michael R. Elkins <me@mutt.org>\n\Copyright (C) 1996-2002 Brandon Long <blong@fiction.net>\n\Copyright (C) 1997-2006 Thomas Roessler <roessler@does-not-exist.org>\n\Copyright (C) 1998-2005 Werner Koch <wk@isil.d.shuttle.de>\n\Copyright (C) 1999-2006 Brendan Cully <brendan@kublai.com>\n\Copyright (C) 1999-2002 Tommi Komulainen <Tommi.Komulainen@iki.fi>\n\Copyright (C) 2000-2002 Edmund Grimley Evans <edmundo@rano.org>\n\\n\Many others not mentioned here contributed code, fixes,\n\and suggestions.\n");static const char *Licence = N_("\ This program is free software; you can redistribute it and/or modify\n\ it under the terms of the GNU General Public License as published by\n\ the Free Software Foundation; either version 2 of the License, or\n\ (at your option) any later version.\n\\n\ This program is distributed in the hope that it will be useful,\n\ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ GNU General Public License for more details.\n");static const char *Obtaining = N_("\ You should have received a copy of the GNU General Public License\n\ along with this program; if not, write to the Free Software\n\ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\");void mutt_exit (int code){ mutt_endwin (NULL); exit (code);}static void mutt_usage (void){ puts (mutt_make_version ()); puts _("usage: mutt [ -nRyzZ ] [ -e <cmd> ] [ -F <file> ] [ -m <type> ] [ -f <file> ]\n\ mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -Q <query> [ -Q <query> ] [...]\n\ mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -A <alias> [ -A <alias> ] [...]\n\ mutt [ -nR ] [ -e <cmd> ] [ -F <file> ] -D\n\ mutt [ -nx ] [ -e <cmd> ] [ -a <file> ] [ -F <file> ] [ -H <file> ] [ -i <file> ] [ -s <subj> ] [ -b <addr> ] [ -c <addr> ] <addr> [ ... ]\n\ mutt [ -n ] [ -e <cmd> ] [ -F <file> ] -p\n\ mutt -v[v]\n"); puts _("\options:\n\ -A <alias>\texpand the given alias\n\ -a <file>\tattach a file to the message\n\ -b <address>\tspecify a blind carbon-copy (BCC) address\n\ -c <address>\tspecify a carbon-copy (CC) address\n\ -D\t\tprint the value of all variables to stdout");#if DEBUG puts _(" -d <level>\tlog debugging output to ~/.muttdebug0");#endif puts _(" -e <command>\tspecify a command to be executed after initialization\n\ -f <file>\tspecify which mailbox to read\n\ -F <file>\tspecify an alternate muttrc file\n\ -H <file>\tspecify a draft file to read header and body from\n\ -i <file>\tspecify a file which Mutt should include in the body\n\ -m <type>\tspecify a default mailbox type\n\ -n\t\tcauses Mutt not to read the system Muttrc\n\ -p\t\trecall a postponed message"); puts _("\ -Q <variable>\tquery a configuration variable\n\ -R\t\topen mailbox in read-only mode\n\ -s <subj>\tspecify a subject (must be in quotes if it has spaces)\n\ -v\t\tshow version and compile-time definitions\n\ -x\t\tsimulate the mailx send mode\n\ -y\t\tselect a mailbox specified in your `mailboxes' list\n\ -z\t\texit immediately if there are no messages in the mailbox\n\ -Z\t\topen the first folder with new message, exit immediately if none\n\ -h\t\tthis help message"); exit (0);}static void show_version (void){ struct utsname uts; puts (mutt_make_version()); puts (_(Notice)); uname (&uts);#ifdef _AIX printf ("System: %s %s.%s", uts.sysname, uts.version, uts.release);#elif defined (SCO) printf ("System: SCO %s", uts.release);#else printf ("System: %s %s", uts.sysname, uts.release);#endif printf (" (%s)", uts.machine);#ifdef NCURSES_VERSION printf (" [using ncurses %s]", NCURSES_VERSION);#elif defined(USE_SLANG_CURSES) printf (" [using slang %d]", SLANG_VERSION);#endif#ifdef _LIBICONV_VERSION printf (" [using libiconv %d.%d]", _LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 0xff);#endif#ifdef HAVE_LIBIDN printf (" [using libidn %s (compiled with %s)]", stringprep_check_version (NULL), STRINGPREP_VERSION);#endif puts (_("\nCompile options:"));#ifdef DOMAIN printf ("DOMAIN=\"%s\"\n", DOMAIN);#else puts ("-DOMAIN");#endif#ifdef DEBUG puts ("+DEBUG");#else puts ("-DEBUG");#endif puts (#ifdef HOMESPOOL "+HOMESPOOL "#else "-HOMESPOOL "#endif#ifdef USE_SETGID "+USE_SETGID "#else "-USE_SETGID "#endif#ifdef USE_DOTLOCK "+USE_DOTLOCK "#else "-USE_DOTLOCK "#endif#ifdef DL_STANDALONE "+DL_STANDALONE "#else "-DL_STANDALONE "#endif "\n" #ifdef USE_FCNTL "+USE_FCNTL "#else "-USE_FCNTL "#endif#ifdef USE_FLOCK "+USE_FLOCK "#else "-USE_FLOCK "#endif #ifdef USE_INODESORT "+USE_INODESORT "#else "-USE_INODESORT "#endif ); puts (#ifdef USE_POP "+USE_POP "#else "-USE_POP "#endif#ifdef USE_IMAP "+USE_IMAP "#else "-USE_IMAP "#endif#ifdef USE_GSS "+USE_GSS "#else "-USE_GSS "#endif #ifdef USE_SSL_OPENSSL "+USE_SSL_OPENSSL "#else "-USE_SSL_OPENSSL "#endif#ifdef USE_SSL_GNUTLS "+USE_SSL_GNUTLS "#else "-USE_SSL_GNUTLS "#endif#ifdef USE_SASL "+USE_SASL "#else "-USE_SASL "#endif#if HAVE_GETADDRINFO "+HAVE_GETADDRINFO "#else "-HAVE_GETADDRINFO "#endif ); puts (#ifdef HAVE_REGCOMP "+HAVE_REGCOMP "#else "-HAVE_REGCOMP "#endif#ifdef USE_GNU_REGEX "+USE_GNU_REGEX "#else "-USE_GNU_REGEX "#endif "\n" #ifdef HAVE_COLOR "+HAVE_COLOR "#else "-HAVE_COLOR "#endif #ifdef HAVE_START_COLOR "+HAVE_START_COLOR "#else "-HAVE_START_COLOR "#endif #ifdef HAVE_TYPEAHEAD "+HAVE_TYPEAHEAD "#else "-HAVE_TYPEAHEAD "#endif #ifdef HAVE_BKGDSET "+HAVE_BKGDSET "#else "-HAVE_BKGDSET "#endif "\n" #ifdef HAVE_CURS_SET "+HAVE_CURS_SET "#else "-HAVE_CURS_SET "#endif #ifdef HAVE_META "+HAVE_META "#else "-HAVE_META "#endif #ifdef HAVE_RESIZETERM "+HAVE_RESIZETERM "#else "-HAVE_RESIZETERM "#endif ); puts (#ifdef CRYPT_BACKEND_CLASSIC_PGP "+CRYPT_BACKEND_CLASSIC_PGP "#else "-CRYPT_BACKEND_CLASSIC_PGP "#endif#ifdef CRYPT_BACKEND_CLASSIC_SMIME "+CRYPT_BACKEND_CLASSIC_SMIME "#else "-CRYPT_BACKEND_CLASSIC_SMIME "#endif#ifdef CRYPT_BACKEND_GPGME "+CRYPT_BACKEND_GPGME "#else "-CRYPT_BACKEND_GPGME "#endif ); puts (#ifdef BUFFY_SIZE "+BUFFY_SIZE "#else "-BUFFY_SIZE "#endif#ifdef EXACT_ADDRESS "+EXACT_ADDRESS "#else "-EXACT_ADDRESS "#endif#ifdef SUN_ATTACHMENT "+SUN_ATTACHMENT "#else "-SUN_ATTACHMENT "#endif "\n" #ifdef ENABLE_NLS "+ENABLE_NLS "#else "-ENABLE_NLS "#endif#ifdef LOCALES_HACK "+LOCALES_HACK "#else "-LOCALES_HACK "#endif #ifdef HAVE_WC_FUNCS "+HAVE_WC_FUNCS "#else "-HAVE_WC_FUNCS "#endif #ifdef HAVE_LANGINFO_CODESET "+HAVE_LANGINFO_CODESET "#else "-HAVE_LANGINFO_CODESET "#endif #ifdef HAVE_LANGINFO_YESEXPR "+HAVE_LANGINFO_YESEXPR "#else "-HAVE_LANGINFO_YESEXPR "#endif "\n"#if HAVE_ICONV "+HAVE_ICONV "#else "-HAVE_ICONV "#endif#if ICONV_NONTRANS "+ICONV_NONTRANS "#else "-ICONV_NONTRANS "#endif#if HAVE_LIBIDN "+HAVE_LIBIDN "#else "-HAVE_LIBIDN "#endif #if HAVE_GETSID "+HAVE_GETSID "#else "-HAVE_GETSID "#endif#if USE_HCACHE "+USE_HCACHE "#else "-USE_HCACHE "#endif );#ifdef ISPELL printf ("ISPELL=\"%s\"\n", ISPELL);#else puts ("-ISPELL");#endif printf ("SENDMAIL=\"%s\"\n", SENDMAIL); printf ("MAILPATH=\"%s\"\n", MAILPATH); printf ("PKGDATADIR=\"%s\"\n", PKGDATADIR); printf ("SYSCONFDIR=\"%s\"\n", SYSCONFDIR); printf ("EXECSHELL=\"%s\"\n", EXECSHELL);#ifdef MIXMASTER printf ("MIXMASTER=\"%s\"\n", MIXMASTER);#else puts ("-MIXMASTER");#endif puts(_(ReachingUs)); mutt_print_patchlist(); exit (0);}static void start_curses (void){ km_init (); /* must come before mutt_init */#ifdef USE_SLANG_CURSES SLtt_Ignore_Beep = 1; /* don't do that #*$@^! annoying visual beep! */ SLsmg_Display_Eight_Bit = 128; /* characters above this are printable */ SLtt_set_color(0, NULL, "default", "default");#if SLANG_VERSION >= 20000 SLutf8_enable(-1);#endif#else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -